Java 杀死或终止一个线程

标签 java concurrency

大家好: 基本上我需要在用户按下终止按钮时终止或停止运行的线程。此线程循环遍历数组列表并在 JTextArea 上显示每个事件。要求是当用户按下终止按钮时,我需要终止正在运行的线程,同时向数组列表添加一个新的“终止”事件并让它再次运行以打印“编程终止”。下面的代码有点“有效”,但我在控制台中得到了一个 java.util.ConcurrentModificationException。谁能帮忙?

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();

        }
    }

最佳答案

问题是您正在修改一个列表,同时循环遍历它。对于标准列表,其行为是未定义的,并且会抛出异常。 看看 java.util.concurrent可安全用于多线程使用的集合包。

关于Java 杀死或终止一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472611/

相关文章:

java - Presto Rest API [在 Presto 版本 333 中]

java - 诺基亚 s40 测试 GPS 或基于位置的服务

java - DocumentCollection 计数为 5 但只获取 1 个文档

java - 如何使用 Xpath 在 XML 树的节点后检索节点?

scala - scala.concurrent.blocking 的坏用例?

java - 从 IntelliJ spring boot 运行配置运行整个 JHipster 生成的 Web 应用程序

java - ExecutorService 是否有一个解决方案,可以限制每个提交的 Callable 的时间

java - java中的简单线程问题

java - 这个 Java 缓存线程安全且最佳吗?

java - 我如何在这里整合执行者?或者我该如何改进这个线程池?