Eclipse客户端程序中多线程的使用 - 编程入门网
将这些Job运行的信息以接口的方式提供给用 户,同时它也提供了接口让我们可以介入Job的调度等,从而我们拥有了更加强大的控制Job的能力。
为了我们更方便的了解Job所处的状态,JobManager设置Job的一个状态标志位,我们可以通过Job的 getState方法获得Job当前的状态值以了解其状态: NONE:当一个Job刚构造的时候,Job就会处于这种状态。当一个Job执行完毕(包括被取消)后,Job 的状态也会变回这种状态。 WAITING:当我们调用了Job的shedule方法,JobManager会将Job放入等待运行的Job队列,这时Job的状 态为WAITING. RUNNING:当一个Job开始执行,Job的状态会变为RUNNING。 SLEEPING:当我们调用Job的sleep方法后,Job会变成这一状态。当我们调用schudule方法的时候带上 延时的参数,Job的状态也会转入这一状态,在这一段延时等待的时间中,Job都处于这一状态。这是一种 睡眠状态,Job在这种状态中时不能马上转入运行。我们可以调用Job的wakeup方法来将Job唤醒。这样, Job又会转入WAITING状态等待运行。 Eclipse中的UI线程 另外,在Eclipse的线程处理中,有一个UI线程的概念。Eclipse程序中的主线程是一个特殊的线程, 程序启动后会先执行这个线程,也就是我们的main()函数所在的线程。作为桌面应用程序,我们的主线程 主要负责界面的响应以及绘制界面元素,所以通常我们也叫它UI线程。 以下代码,编过SWT应用程序的读者会非常熟悉。它一般出现在main函数的结尾。下面来仔细分析一下 它的详细情况。
上面的程序实际上就是我们UI线程的处理逻辑:当程序启动后,UI线程会读取事件等待队列,看有没 有事件等待处理。如果有,它会进行相应处理,如果没有它会进入睡眠状态。如果有新的事件到来,它又 会被唤醒,进行处理。UI线程所需要处理的事件包括用户的鼠标和键盘操作事件,操作系统或程序中发出 的绘制事件。一般来说,处理事件的过程也就是响应用户操作的过程。 一个好的桌面应用程序需要对用户的操作作出最快的响应,也就是说我们的UI线程必须尽快的处理各 种事件。从我们程序的角度来说,在UI线程中我们不能进行大量的计算或者等待,否则用户操作事件得不 到及时的处理。通常,如果有大量的计算或者需要长时间等待(例如进行网络操作或者数据库操作)时, 我们必须将这些长时间处理的程序单独开辟出一个线程来执行。这样虽然后台运行着程序,但也不会影响 界面上的操作。 除主线程之外的所有线程都是非UI线程。在Eclipse程序中,我们所有对界面元素的操作都必须放到UI 线程中来执行,否则会抛出Exception,所以我们要区分出UI线程和非UI线程,保证我们对UI的操作都在 UI线程中执行。 如何判断当前线程是否UI线程: 你可以通过调用Display.getCurrent()来知道当前线程是否是UI线程 。如果Display.getCurrent()返回为空,表示当前不是UI线程。 Eclipse中使用线程的几种典型情况 Eclipse客户端程序中多线程的使用(3)时间:2011-08-11 IBM 梁 骞控制Job的并发运行 对于某些Job,为了避免并发性问题,我们希望同时只有一个这样的Job在运行,这时我们需要控制Job 的并发运行。在另一种情况下,我们也需要控制Job的并发运行:我们在程序中对于一个任务,我们有可 能会启动一个Job来执行,对于少量的任务来说,这是可行的,但是如果我们预测可能会同时有大量的任 务,如果每一个任务启动一个Job,我们同时启动的Job就会非常多。这些Job会侵占大量的资源,影响其 他任务的执行。我们可以使用Job的rule来实现控制Job的并发执 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |