Java Swing死锁场景

时间:2014-10-30 10:05:17

标签: java swing deadlock swingworker event-dispatch-thread

我在学习Java线程时遇到了这个问题:对于有两个工作线程的Swing应用程序,EDT正在等待GUI事件,两个工作人员都在等待。这被认为是一个僵局的应用程序吗?

当应用程序在等待用户输入时,我觉得它与“空闲状态”非常相似。但如果不是,这种情况会出现什么样的僵局? EDT正在等待,两名工人都在跑?

1 个答案:

答案 0 :(得分:0)

死锁场景是指你有2个线程(或n个theads)在继续之前等待彼此完成 - 这将永远不会发生。

如果Event Dispatch Thread(单个线程在这里n = 1),如果您向EDT提交新任务,例如通过SwingUtilities.invokeAndWait())从已在EDT中执行的代码中提交,则可以使线程死锁。

这样,SwingUtilities.invokeAndWait(Runnable)将一直等到提交Runnable完成,但事实上它永远不会开始执行,因为它已入队,直到EDT空闲(whitch是当前线程) - 这永远不会发生。

应用程序填充冻结,你只能移动窗口,而不是调整它的大小(你将改变大小,但它不会被修复)

请不要误解空闲状态和死锁。空闲意味着线程无所事事,例如等待新任务。死锁是编程中的错误,必须避免。