SWT多线程注意事项

要在后台线程里对前台界面组件进行访问的解决办法:使用Display对象,Display对象主要负责管理事件循环和控制UI线程和其它线程之间的通信。

 

若要访问UI界面上的对象必须通过UI线程来访问,就是说在非UI线程中调用UI对象是不允许的,这是出于线程安全的考虑。

    Display对象中负责调用其他线程的方法有以下3种:
1. asyncExec(Runnable runnable):异步启动新的线程。UI线程不会等待runnable对象执行结束后再继续进行,就是说UI线程可以和runnable对象所在的线程同时运行。
2. syncExec(Runnable runnable):同步启动新的线程。UI线程会等待runnable对象执行结束后才会继续进行。getSyncThread()方法可以获得线程对象。当runnable对象是耗时大的线程时,尽量不要采用此种方式。

3. timerExec(int milliseconds, Runnable runnable):指定一段时间再启动新的线程。用此方法创建的线程,将会在指定的时间后再启动线程。与UI线程是异步的。


Display对象中,与UI线程相关的方法如下:
 1. 获得当前的UI线程对象:getThread()
 2. 使UI线程处于休眠状态:sleep()
 3. 唤醒UI线程:wake()

posted on 2012-09-17 13:01  风也无踪  阅读(487)  评论(0编辑  收藏  举报

导航