千家信息网

SwingWorker()构造器的线程是怎样的

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天就跟大家聊聊有关SwingWorker()构造器的线程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。演示程序用SwingWorke
千家信息网最后更新 2025年01月23日SwingWorker()构造器的线程是怎样的

今天就跟大家聊聊有关SwingWorker()构造器的线程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

演示程序用SwingWorker()构造器在后台执行费时的操作,然后更新UI。
这个新的实现还基于DougLea的util.concurrent包的FutureResult类。由于大量依赖了FutureResult所做的工作,SwingWorker类的实现是简单而灵活的。
本节的余下部分更详细地描述了实现的细节,请继续往下看或直接跳到后面下载源码。
RunnableFutureResult

FutureResult,正如它的名字所暗示的,它是用来保持某动作的结果的。它被设计成和一个Callable共同使用,Callable是一个会返回结果的runnable动作:

publicinterfaceCallable{  Objectcall()throwsException;  }

新的SwingWorker是一个RunnableFutureResult。在运行时,它把结果设成construct()的返回值,然后在事件派发线程中调用finished()方法。(注意:SwingWorker是一个抽象类;你要子类化它并实现construct()和finished()。)
下面的代码来自SwingWorker的run()方法:

Callablefunction=newCallable(){  publicObjectcall()throwsException{  returnconstruct();  }  };
RunnabledoFinished=newRunnable(){  publicvoidrun(){  finished();  }  };   setter(function).run();  SwingUtilities.invokeLater(doFinished);

***段把construct()转换成一个Callable动作,第二段把finished()转换成作为Runnable的doFinished。然后setter(function)被运行,doFinished被调用。
setter(function)

上面缺少的部分是setter(function)。它创建一个刻板的Runnable。在运行时,这个Runnable调用参数指定的function,然后给结果设置返回值。下面是来自FutureResult的代码:

publicRunnablesetter(finalCallablefunction){  returnnewRunnable(){  publicvoidrun(){  try{  set(function.call());  }  catch(Throwableex){  setException(ex);  }  }  };  }

注意try-catch块所作的防护。如果construct()抛出任何东西(Exception、Error等等),都会被捕捉并记录下来。
不要抢跑:先construct,再start

调用start()来启动worker线程。这是修订版的SwingWorker和原来版本的一个重要区别。
在原来的版本中,SwingWorker()构造器自动启动线程,这种做法带来了一个线程和子类构造器竞争的危险:当SwingWorker()构造器已启动了线程,而子类的构造器还没完成。弥补方法是,先构造SwingWorker,然后再调用start()。
顺便一提,RemoteTable并不调用start()。正确来说,SwingWorker是作为一个Runnable被QueuedExecutor执行的。

看完上述内容,你们对SwingWorker()构造器的线程是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

线程 构造器 结果 内容 动作 子类 方法 运行 代码 版本 部分 刻板 重要 危险 东西 事件 修订版 做法 参数 名字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 考勤机表格如何修改数据库 深圳市星科网络技术有限公司 哪些数据库不可以下载电子图书 软件开发安全风险对策 行云数据库怎么登录 武清区媒体网络技术诚信合作 2008r2数据库如何共享 在服务器里玩tnt会崩吗 万方数据库 学术会议文库 软件开发著作权免增值税 税收网络安全简报 为什么说网络安全是一个系统 互联网游戏服务器是什么意思 网络技术考研考哪几门 泰安软件存储服务器 上饶香港服务器找哪家好 怎么攻击我的世界私人服务器 数据库数据结构化 部队网络安全感悟体会 java不让数据库写入重复数据 查询数据库表的个数 外派软件开发人员价格 数据库用户信息全部删除 安全接入服务器地址非法 博兴销售采购生产软件开发价格 大数据云计算软件开发公司 电脑怎么设置无线网络安全 国开大数据库应用技术小结练习 开源体系 软件开发 网络安全绘画字少的
0