我正在調查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