java - JAVA中唯一标识终止的线程

标签 java multithreading threadpoolexecutor

假设我有一个名为 USERS 的列表,其中包含 USER1 和 USER2。 一次最大线程数可以是USERS的大小。在本例中为 2。 创建的线程将与用户同名

我有另一个包含一些值的列表。在这种情况下,假设我们有

List<String> values = new ArrayList<>();
values.add("A");values.add("B");values.add("C");values.add("D");

USER1 和 USER2 必须从“值”中选取数据。

所以我们启动线程,最大线程数可以是USERS的大小,即2。

我们启动两个线程,并为它们分配“值”列表中的前两个值。

所以现在 USER1--has--> A 和 USER2--has--> B。

现在,USER2 线程完成,而 USER1 仍在运行。

由于 USER2 已完成。我再次需要创建一个新线程来处理“值”中的剩余数据。

那么我应该如何知道 USER2 线程已完成并创建一个名为 USER2 的新线程。

最佳答案

how am I supposed to know that USER2 thread has finished

1。您需要您的线程向某人报告其终止。有人会是,

interface ThreadListener {
    void onThreadTerminated(String threadName);
}

2。现在创建您的线程,例如当它终止时,它会向 ThreadListener 报告其状态。

class MyThread extends Thread {
    private ThreadListener listener;

    MyThread(ThreadListener listener) {
        this.listener = listener;
    }

    public void run() {
        System.out.println(getName() + " starting execution.");
        doWork();
        listener.onThreadTerminated(getName());
    }

    public void doWork(){
        try {
            Thread.sleep(1500);
        } catch (Exception e) {}
    }
}

3。最后你需要线程状态的涉众的具体实现,

class Listener implements ThreadListener {

    public void onThreadTerminated(String threadName) {
        System.out.println(threadName + " finished execution");
    }
}

4。在您的程序中使用它并应用您自己的逻辑,

public static void main(String[] args) {
    Listener l = new Listener();
    MyThread t = new MyThread(l);
    t.setName("MyThread");
    t.start();
}

输出,

MyThread开始执行。

MyThread 完成执行(1.5 秒后)

关于java - JAVA中唯一标识终止的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60412063/

相关文章:

java - java main 函数中使用的泛型类

python - 为什么我获取不到这个http_response的状态码?

c++ - 线程在开源应用程序中的使用示例

java - java ThreadPoolExecutor 中的workerCountOf()方法

java - Netty 4 OrderedMemoryAwareThreadPoolExecutor

java - 指示 JVM validator 何时验证类

java - Spring自动类型转换不适用于字符串到日期

Java:如何让已完成的线程从正在运行的线程中获取任务

java - 概念名称必填

ruby - 在 Ruby 中使用线程进行指标收集会产生大量开销吗?