大家好: 基本上我需要在用户按下终止按钮时终止或停止正在运行的线程。此线程循环播放列表并在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