知识大全 Java Swing多线程死锁问题解析

Posted

篇首语:忍耐力较诸脑力,尤胜一筹。。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java Swing多线程死锁问题解析相关的知识,希望对你有一定的参考价值。

Java Swing多线程死锁问题解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在基于Java Swing进行图形界面开发的时候 经常遇到的就是Swing多线程问题 我们可以想想一下 如果需要在一个图形界面上显示很多数据 这些数据是经过长时间 复杂的查询和运算得到的 如果在图形界面的同一个线程中进行查询和运算工作则会导致一段时间界面处于死机状态 这会给用户带来不良的互动感受 为了解决这个问题 一般会单独启动一个线程进行运算和查询工作 并随时更新图形界面 这时候 另一个问题就出现了 可能不仅没有解决原来偶尔死机问题 还可能导致程序彻底死掉 幸运的是在JDK中暗藏了一个中断程序的快捷键 就是CTRL+BREAK 这个快捷键Sun并没有在文档中公布 如果在命令行模式下启动Java程序 然后按CTRL+BREAK键 会得到堆栈的跟踪信息 从这些跟踪信息中就可以知道具体引发死机的位置了

  当一个程序产生死锁的时候 你一定会希望尽快找到原因并且解决它 这时候 你一般的精力会用在查找引发死锁的位置 另一半的精力会用于对堆栈进行跟踪一确定引发死锁的原因 但是在Java Swing程序中 你的所有努力可能都是没有价值的 这是因为Java对Swing的多线程编程有一个特殊要求 就是在Swing里 只能在与Swing相同的线程里对GUI元件进行修改

  也就是说 如果你要执行类似于jLabel setText( blabla )代码 必须在Swing线程中 而不允许在其他线程当中 如果必须在其他线程中修改元件 可以使用类似一下方式解决

  SwingUtilities invokeLater(new Runnable()

  public void run()

  jLabel setText( blabla );

  

  

  invokeLater方法虽然表面有时间延迟执行含义 但是实际上几乎没有任何影响 可能在几毫秒之内就会被执行 另外还有一个invokeAndWait方法 除非特殊需要 否则几乎是不用的

  在不使用invokeLater的情况下 导致刷新问题是可以理解的 但是导致死锁就优点令人匪夷所思了 幸运的是 不是任何时候都需要调用改方法 这是因为大多数情况下 我们都是在与Swing同一个线程里进行界面更新 例如监听按钮点击事件的ActionListener actionPerformed方法就是运行在与Swing相同的线程中的 但是如果在回调类中引用了另一个类 并且是不属于AWT/Swing的 那么结果就很难确定了 所以说使用invokeLater应该是最安全的

  需要注意的是 在invokeLater做的任何事情 都会导致Swing线程窗口绘制工作暂停下来 等候invokeLater工作结束 所以不要在invokeLater进行耗时操作 尽量只执行那些界面绘制相关的工作 可以通过代码重构 将那些与界面更新相关的代码集中起来统一处理

cha138/Article/program/Java/gj/201311/27498

相关参考

知识大全 多线程中的死锁问题

  /*  *死锁  *同步中嵌套同步  *也就是有两个房子A和B主人A拿着B房间的锁B主人拿着A房间的锁A拿不到B的锁就进不去房间  *而B拿不到A的锁也进不去房间两人相持不下  *死锁属于操作系统

知识大全 Java多线程处理三大讲解

Java多线程处理三大讲解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!死锁  

知识大全 Java开发中的线程安全选择与Swing

Java开发中的线程安全选择与Swing  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Swin

知识大全 Java Swing开发中的线程安全

JavaSwing开发中的线程安全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SwingAP

知识大全 多线程中的死锁举例与分析

  一个特殊构造的程序  考虑下面这个专门为说明多线程中的死锁现象而构造的程序  importjavautilLinkedList;  publicclassStack  publicstaticvo

知识大全 解析Java的多线程机制

解析Java的多线程机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一进程与应用程序的区别 

知识大全 Swing多线程编码过程中的误区

Swing多线程编码过程中的误区  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 关于Java多线程技术中所有方法的详细解析

Java进阶:关于Java多线程技术中所有方法的详细解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Java多线程技术中所有方法的详细解析[2]

Java多线程技术中所有方法的详细解析[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以上

知识大全 Java多线程技术中所有方法的详细解析[1]

Java多线程技术中所有方法的详细解析[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一r