java - 如何一一停止线程类的多个实例?

标签 java multithreading

我有一个 Java Thread 工作线程类,它被启动了多次(假设有 10 个实例)。现在我想按照它们创建的顺序逐个停止这些正在运行的线程(首先)。所有这些线程对象都存储在 ArrayList 中。有人可以帮忙吗。

提前致谢 李

最佳答案

Thread.join() 方法用于相同目的。 Docs here .

假设您有线程 T1、T2 和 T3。

要在 T2 之前完成 T3、在 T1 之前完成 t2,您需要从 T1 调用 T2.join() 并从 T2 调用 T3.join()。你可以做如下的事情 -

public class ThreadSync extends Thread {

Thread waitForThread;

public void setWaitForThread(Thread waitForThread) {
    this.waitForThread = waitForThread;
}

@Override
public void run() {
    try {
        System.out.println(Thread.currentThread().getName() + " Thread Started");
        if(waitForThread != null)
            waitForThread.join();
        System.out.println(Thread.currentThread().getName() + " Thread Terminating");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

public static void main(String args[]){


    Thread t1 = new ThreadSync();
    t1.setName("T1");
    Thread t2 = new ThreadSync();
    t2.setName("T2");
    Thread t3 = new ThreadSync();
    t3.setName("T3");

    ((ThreadSync)t3).setWaitForThread(t2);
    ((ThreadSync)t2).setWaitForThread(t1);

    t1.start();
    t2.start();
    t3.start();

}

}

输出为

T1 Thread Started
T3 Thread Started
T2 Thread Started
T1 Thread Terminating
T2 Thread Terminating
T3 Thread Terminating

关于java - 如何一一停止线程类的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21229178/

相关文章:

java - 让微调器显示他们选择的内容

java - Having 或 Where 子句中的 BigQuery RANK()

java - android:每次点击播放不同的声音

java - 将 JCombo 列添加到 JTable

c# - 任务 MaxDegreeOfParallelism 每次都可以从我的列表中获取第一个 n 对象吗?

python - 如何同时运行 2 个列表的循环,以便循环中的每个项目都匹配? [Python]

java - 使用JBoss连接EJB

java - Java 线程的意外行为

python - 线程处理时未执行的函数

c++ - 如何从 boost::thread 取回值?