Tag: 并发

为什么SwingWorker意外停止?

我想用SwingWorker尝试一些想法,因为我没有太多使用它。 相反,我遇到了一个问题,我无法弄清楚出了什么问题。 这是一个简短的SSCCE来演示这个问题(我知道这里的人就像SSCCEs): import javax.swing.SwingUtilities; import javax.swing.SwingWorker; public class SwingWorkerTest { public static void main (String[] args) { SwingUtilities.invokeLater (new Runnable () { @Override public void run () { new MySwingWorker (500).execute (); new MySwingWorker (900).execute (); new MySwingWorker (1200).execute (); } }); } } class MySwingWorker extends SwingWorker { private int ms; public MySwingWorker […]

字段读取和volatile的同步之间的区别

在一篇包含一些并发技巧的文章中 ,一个示例针对以下几行进行了优化: double getBalance() { Account acct = verify(name, password); synchronized(acct) { return acct.balance; } } 如果我理解正确,同步的关键是确保此线程读取的acct.balance的值是最新的,并且对acct.balance中对象的字段的任何挂起写入也写入主存储器。 这个例子让我想一想:将acct.balance(即类Account的字段余额)声明为volatile是不是更有效率? 它应该更有效,除了你对acct.balance访问的所有synchronize ,并不会锁定整个acct对象。 我错过了什么吗?

在JFrame Java中闪烁

大家好我正在做一个线程来更新JFrame上的球,所以我重新绘制屏幕……然后将球更新到它的位置……然后再次绘制屏幕……画出球和同样的周期……这是代码 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { Thread t = new Thread() { public void run() { while(true) { repaint(); b2.update(ob,2); b2.paint(ob.getGraphics()); b2.setT(b2.getT() + 1); try { Thread.sleep(50); } catch (InterruptedException ex) { System.out.println(“Error in Sleeping”); } } } }; t.start(); } 但问题是我没有看到球…屏幕的油漆总是覆盖球,而球就像是在Jframe下面。

Java wait()不会被notify()唤醒

你好我已经调试了一整天的代码了,但我看不出哪里可能出错了。 我在主线程上使用SerialPortEventListener,在工作线程中我有一个与服务器通信的客户端套接字。 由于在这个工作线程return ,我仍然需要在主线程中完成一些总结工作,我想创建一个在主线程中等待的“伪线程”,直到从侦听器onEvent方法通知它。 但是这种伪线似乎永远等待着。 我检查了锁定的线程pseudoThread ,它们应该在Runnable和Listener类中具有相同的对象id。 显示“PseudoThread waiting”,但是从未显示PseudoThread清醒。 控制台输出显示:PseudoThread等待.. .. false通知伪线程。 PS如果我在Main类中使用public final Object lock = new Object();创建一个锁public final Object lock = new Object(); 并用main.pseudoThread替换所有main.pseudoThread ,我得到java.lang.IllegalMonitorStateException。 private class Pseudo implements Runnable{ Main main; public Pseudo(Main main) { this.main = main; } @Override public void run() { synchronized(main.pseudoThread){ try { System.out.println(“PseudoThread waiting”); main.pseudoThread.wait(); System.out.println(“PseudoThread awake”); […]

断点是否会停止所有线程?

如果我在程序中同时运行两个线程并在其中一个上放置一个断点,那么另一个线程是否会在该断点被触发时停止,或者它是否会继续执行? (我用Java编写并使用NetBeans)

解释导致HashMap.put()执行无限循环的时间

正如许多人已经注意到并遇到HashMap.put可以在并发使用时进入无限执行循环(参见GRIZZLY-1207 , JGRP-525 ,可能是HHH-6414 ,以及此SO 答案 )。 HashMap明确记录为不是线程安全的。 显然,正确的解决方法是使用Map , ConncurrentHashMap的线程安全实现。 我对导致无限循环的并发时序更加好奇。 我最近使用Java 7 JRE遇到了这个循环,并希望了解确切的原因。 例如,这是由同时多次看跌引起的吗? 在HashMap.put中查看HashMap.Entry包含指向下一个节点的链接(在存储桶中?)。 我假设这些链接正在腐蚀以包含循环引用,这导致无限循环。 但是,我仍然不明白腐败是如何发生的。

在具有等待任务时动态调整java.util.concurrent.ThreadPoolExecutor的大小

我正在使用java.util.concurrent.ThreadPoolExecutor来并行处理多个项目。 尽管线程本身工作正常,但由于线程中发生的操作,我们有时会遇到其他资源限制,这使我们想要调低池中线程的数量。 我想知道在线程实际工作时是否有办法拨打线程数。 我知道您可以调用setMaximumPoolSize()和/或setCorePoolSize() ,但这些只会在线程空闲后调整池的大小,但是在队列中没有任务等待之前它们不会变为空闲。

涉及Swing和AWT-EventQueue的无响应线程

我有一个没有响应的应用程序,似乎陷入僵局或类似僵局。 请参阅下面的两个主题。 请注意, My-Thread@101c线程阻止AWT-EventQueue-0@301 。 但是, My-Thread刚刚调用了java.awt.EventQueue.invokeAndWait() 。 所以AWT-EventQueue-0阻止My-Thread (我相信)。 My-Thread@101c, priority=5, in group ‘main’, status: ‘WAIT’ blocks AWT-EventQueue-0@301 at java.lang.Object.wait(Object.java:-1) at java.lang.Object.wait(Object.java:485) at java.awt.EventQueue.invokeAndWait(Unknown Source:-1) at javax.swing.SwingUtilities.invokeAndWait(Unknown Source:-1) at com.acme.ui.ViewBuilder.renderOnEDT(ViewBuilder.java:157) . . . at com.acme.util.Job.run(Job.java:425) at java.lang.Thread.run(Unknown Source:-1) AWT-EventQueue-0@301, priority=6, in group ‘main’, status: ‘MONITOR’ waiting for My-Thread@101c at com.acme.persistence.TransactionalSystemImpl.executeImpl(TransactionalSystemImpl.java:134) . . . at […]

是在Java中写入易失性的内存屏障

我最近在一次演讲中听到,写入volatile会触发线程写入的每个变量的内存屏障。 这是真的正确吗? 从JLS看来,似乎只有相关变量才会被刷新,而其他变量则不然。 有人知道什么是正确的吗? 能指出我在JLS的具体位置吗?

如何使用java和spring 3.0从JMS主题(而不是队列)同时处理多个消息?

请注意,我希望多个消息侦听器同时处理来自主题的连续消息。 此外,我希望每个消息监听器都以事务方式运行,以便给定消息监听器中的处理失败将导致该监听器的消息保留在该主题上。 Spring DefaultMessageListenerContainer似乎只支持JMS队列的并发性。 我是否需要实例化多个DefaultMessageListenerContainers? 如果时间沿垂直轴向下流动: ListenerA reads msg 1 ListenerB reads msg 2 ListenerC reads msg 3 ListenerA reads msg 4 ListenerB reads msg 5 ListenerC reads msg 6 ListenerA reads msg 7 ListenerB reads msg 8 ListenerC reads msg 9 ListenerA reads msg 10 ListenerB reads msg 11 ListenerC reads msg 12 … […]