我正在调查setText上的死锁问题,但我需要先了解和了解有关死锁的信息。为此,我创建了一个简短的程序来尝试复制更大范围内可能发生的情况,但我不确定为什么我的小程序不会死锁。为什么这个代码不会死锁?
这里是我的学习计划:
public static void main(String[] a)
{
JFrame frame = new JFrame();
final JTextField p = new JTextField("start");
JButton btn = new JButton("button");
btn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
p.setText(String.valueOf(System.nanoTime()));
}
});
}
});
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(p);
frame.getContentPane().add(btn);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
我认为修改摆动不能在一个单独的线程来完成,所以我,有一个setText来改变在invokeLater
点击按钮JTextField的大小。这样做应该打破单线程规则,这会不会导致死锁?
为什么在[这个](http://stackoverflow.com/questions/8865800/deadlock-when-using-settext-on-jtextarea-in-swing)问题他们得到一个类似的设置我的死锁?他们之间有什么区别 – Aequitas
@Aequitas对于初学者,你没有在Swing对象(框架)上同步,然后你在Swing事件线程开始之后提交你的任务(另一个尝试在任何之前提交它Swing已经启动)。 – chrylis
我看到了谢谢,我将invokeLater移入主体而不是按钮按下,现在它已经死锁。同步化的意思是什么? – Aequitas