大家好: 基本上我需要在用戶按下終止按鈕時終止或停止正在運行的線程。此線程循環播放列表並在JTextArea上顯示每個事件。要求是當用戶按下Terminate按鈕時,我需要終止正在運行的線程,同時向ArrayList添加一個新的「終止」事件,並讓它再次運行以打印「編程終止」。下面的代碼類型的「作品」,但我在控制檯中得到了一個java.util.ConcurrentModificationException。任何人都可以幫忙Java終止或終止線程
public void startEvents()
{
terminate = false;
worker = new Thread(new Runnable()
{
public void run()
{
Iterator<Event> it = eventList.iterator();
while (it.hasNext())
{
waitWhileSuspended();
terminatEvents();
Event ev = it.next();
try
{
Thread.sleep(ev.getDelayTime());
} catch (InterruptedException e1)
{
e1.printStackTrace();
}
jTextArea.append(ev.toString() + "\n");
it.remove();
}
jbStart.setEnabled(true);
jmiStart.setEnabled(true);
jbRestart.setEnabled(true);
jmiRestart.setEnabled(true);
}
});
worker.start();
}
public void terminatEvents()
{
while(terminate)
{
Thread.yield();
eventList.clear();
eventList.add(new Terminate(delayTime));
startEvents();
}
}
什麼數據類型是eventList? (實際上是一個java.util.ArrayList <...>)嘗試java.util.concurrent包中的集合,看看是否有幫助。僅供參考,我通常使用某種類型的互斥體(例如java.util.concurrent.ReentrantLock)來處理這種情況。 – Merky 2010-12-17 16:38:09