Eclipse Jobs 和后台进程
1.主线程(Main thread)
一个Eclipse客户端只能跑一个进程,但却可以创建很多线程。
在Eclipse框架中,会用一个单线程去运行所有的代码指令,这个线程执行客户端的所有循环事件,并且只有这个线程能够与UI进行交互,这个线程就是主线程。有时它也被成为UI线程,但是这是不准确的,因为它能处理所有的事件,UI事件只是其中的一部分。
如果其他的线程想要去更新UI,Eclipse框架则会抛出SWTException异常
org.eclipse.swt.SWTException: Invalid thread access
在UI中,所有的事件都是一个接一个地运行,如果你在主线程中进行需要长时间运行的操作,在这个运行过程中,客户端就不会响应用户的其他操作。
锁住用户界面不是一个好的做法,因此,如果有大量的计算或者需要长时间等待(例如进行网络操作或者数据库操作)时,我们必须将这些长时间处理的程序单独开辟出一个线程来执行。这样虽然后台运行着程序,但也不会影响界面上的操作。
在Eclipse框架中,因为只有主线程能修改界面元素,所以它也提供了让其他线程与主线程进行同步的方法。它就是Eclipse Jobs框架,这个框架允许你在后台执行操作,同时把job的执行结果反馈给Eclipse平台。
2. 使用依赖注入和UISynchronize
The org.eclipse.e4.ui.di
plug-in contains the UISynchronize
class. An instance of this class can be injected into an Eclipse application via dependency injection.
UISynchronize
provides the syncExec()
and asyncExec()
methods to synchronize with the main thread.
3. Eclipse Job API
在我们基于Eclipse的Java程序中,我们有很多种方式提供多任务的实现。熟悉Java的朋友立即会想到Java的Thread类,这是Java中使用最多的一个实现多任务的类。Eclipse平台为多任务处理提供了自己的API,那就是Job以及UIJob。Eclipse中的Job是对Java Thread的一个封装,为我们实现多任务提供了更方便的接口。