1、public void syncExec (Runnable runnable) {
Synchronizer synchronizer;
synchronized (Device.class) {
if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
synchronizer = this.synchronizer;
}
synchronizer.syncExec (runnable);
}
2、public void asyncExec (Runnable runnable) {
synchronized (Device.class) {
if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
synchronizer.asyncExec (runnable);
}
}
3、
public boolean readAndDispatch () {
checkDevice ();
lpStartupInfo = null;
drawMenuBars ();
runSkin ();
runDeferredLayouts ();
runPopups ();
if (OS.PeekMessage (msg, 0, 0, 0, OS.PM_REMOVE)) {
if (!filterMessage (msg)) {
OS.TranslateMessage (msg);
OS.DispatchMessage (msg);
}
runDeferredEvents ();
return true;
}
return isDisposed () || (runMessages && runAsyncMessages (false));
}
syncExec :是关于UI线程的同步方法。这个方法会将一个runnabale一个一个挨个执行完了才会执行
UI主线程的任务
asyncExec :是关于UI线程的异步方法。这个方法会将UI主线程的任务(接受到的事件等)执行完过后才会执行
runnabale也是按照添加的队列顺序执行。
3、设置延迟响应UI界面
Synchronizer synchronizer;
synchronized (Device.class) {
if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
synchronizer = this.synchronizer;
}
synchronizer.syncExec (runnable);
}
2、public void asyncExec (Runnable runnable) {
synchronized (Device.class) {
if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
synchronizer.asyncExec (runnable);
}
}
3、
public boolean readAndDispatch () {
checkDevice ();
lpStartupInfo = null;
drawMenuBars ();
runSkin ();
runDeferredLayouts ();
runPopups ();
if (OS.PeekMessage (msg, 0, 0, 0, OS.PM_REMOVE)) {
if (!filterMessage (msg)) {
OS.TranslateMessage (msg);
OS.DispatchMessage (msg);
}
runDeferredEvents ();
return true;
}
return isDisposed () || (runMessages && runAsyncMessages (false));
}
syncExec :是关于UI线程的同步方法。这个方法会将一个runnabale一个一个挨个执行完了才会执行
UI主线程的任务
asyncExec :是关于UI线程的异步方法。这个方法会将UI主线程的任务(接受到的事件等)执行完过后才会执行
runnabale也是按照添加的队列顺序执行。
主要是在其他线程中要使用到UI线程时,方便使用。在非UI线程中是不能执行UI任务的
Job 的使用参加:
1、设置job的运行规则
myjob1.setRule(Schedule_RULE); myjob2.setRule(Schedule_RULE);
2、设置jobManager的线程分组
Job.getJobManager().cancel(MY_JOB_FAMILY); //取消所有属于MY_JOB_FAMILY的所有Job Job.getJobManager().join(MY_JOB_FAMILY); //等待属于MY_JOB_FAMILY的所有Job结束 Job.getJobManager().sleep(MY_JOB_FAMILY); //将所有属于MY_JOB_FAMILY的Job转入睡眠状态 Job.getJobManager().wakeup(MY_JOB_FAMILY); //将所有属于MY_JOB_FAMILY的Job唤醒 |
private final static Object UPDATE_UI_JOBFAMILY = new Object(); tableviewer. addSelectionChangedListener (new ISelectionChangedListener (){ public void selectionChanged(SelectionChangedEvent event){ Job.getJobManager().cancel(UPDATE_UI_JOBFAMILY); new UIJob("更新界面") { protected IStatus runInUIThread (IProgressMonitor monitor) { //更新界面 return Status.OK_STATUS; } public boolean belongsTo(Object family){ return family== UPDATE_UI_JOBFAMILY; } }.schedule(500); } });详细:
http://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-multithrd/