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/
1182

被折叠的 条评论
为什么被折叠?



