知识大全 Eclipse客户端程序中多线程的使用[4]
Posted 知
篇首语:笛里谁知壮士心,沙头空照征人骨。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Eclipse客户端程序中多线程的使用[4]相关的知识,希望对你有一定的参考价值。
Eclipse客户端程序中多线程的使用[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
延时执行Job 避免无用的Job运行
我们经常需要根据选中的对象刷新我们部分的界面元素 如果我们连续很快的改变选择 而每次刷新界面涉及到的区域比较大时 界面会出现闪烁 从用户的角度来说 我们很快的改变选择 希望看到的只是最后选中的结果 中间的界面刷新都是不必要的
在Jface中 StructuredViewer提供了addPostSelectionChangedListener方法 如果我们使用这个方法监听selectionChanged事件 当用户一直按著方向键改变选中时 我们只会收到一个selectionChanged事件 这样我们可以避免过度的刷新界面
实际上 Jface中就是通过延时执行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( ); );
首先 我们需要将界面更新的代码放到一个UIJob中 同时我们将Job延时 毫秒执行(我们可以根据需要改变延时的时间) 如果下一个selectionChanged事件很快到来 我们的调用Job getJobManager() cancel(UPDATE_UI_JOBFAMILY)将以前未运行的Job取消 这样只有最后一个Job会真正运行
在UI线程中等待非UI线程的结束 有时 我们在UI线程中需要等待一个非UI线程执行完 我们才能继续执行 例如 我们在UI线程中要显示某些数据 但是这些数据又需要从数据库或者远程网络获取 于是 我们会启动一个非UI的线程去获取数据 而我们的UI线程必须要等待这个非UI线程执行完成 我们才能继续执行 当然 一种简单的实现方法是使用join 我们可以在UI线程中调用非UI线程的join方法 这样我们就可以等待它执行完了 我们再继续 但是 这会有一个问题 当我们的UI线程等待时 意味着我们的程序不会再响应界面操作 也不会刷新 这样 用户会觉得我们的程序象死了一样没有反应 这时 我们可以使用ModalContext类 你可以将你要执行的获取数据的任务用ModalContext的run方法来运行(如下) ModalContext会将你的任务放到一个独立的非UI线程中执行 并且等待它执行完再继续执行 与join方法不同的是 ModalContext在等待时不会停止UI事件的处理 这样我们的程序就不会没有响应了
try ModalContext run(new IRunnableWithProgress() public void run(IProgressMonitor monitor) throws InvocationTargetException InterruptedException /*需要在非UI线程中执行的代码*/ ModalContext checkCanceled(monitor); true new NullProgressMonitor() Display getCurrent()); catch (InvocationTargetException e) catch (InterruptedException e)
cha138/Article/program/Java/gj/201311/27700相关参考
Eclipse客户端程序中多线程的使用[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文
Eclipse客户端程序中多线程的使用[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 针对
Eclipse客户端程序中多线程的使用[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这样
Eclipse客户端程序中多线程的使用[6] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jo
Eclipse客户端程序中多线程的使用[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ec
关于Eclipse中UI程序的线程的讨论 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!虽然各个操作
Java开发中多线程同步技巧[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java开发中多线程同步技巧[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java开发中多线程同步技巧[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
网上参考别人的例子改自己的程序终于搞明白了原来在socket的服务器端设置线程并不是像之前想的那样建立一个连接后就重新开一个端口去监听这样的想法遇到了很多问题首先当我把客户端弄成for循环递增的链