java - java中线程之间的通信: stopping a thread if another thread has finished

标签 java multithreading

如何让一个线程仅在另一个线程也在运行时才运行,这意味着,如果我从一个线程中的运行返回,那么我希望另一个线程也停止运行, 我的代码看起来像这样:

ClientMessageHandler clientMessagehandler = new ClientMessageHandler();
ServerMessageHandler serverMessagehandler = new ServerMessageHandler();
Thread thread1 = new Thread(serverMessagehandler);
Thread thread2 = new Thread(clientMessagehandler);
thread2.start();
thread1.start();

我想让 thread1thread2 停止运行时停止运行。

编辑:检测 thread2 何时停止运行,以阻止 thread1 运行,而不是如何阻止 thread1 运行 谢谢

最佳答案

这个最小的示例应该演示基本思想:

import java.io.*;
import java.util.concurrent.LinkedBlockingQueue;

public class Test {

    static LinkedBlockingQueue<String> msgBuf = new LinkedBlockingQueue<String>();
    static volatile boolean keepRunning = true;
    static Thread thread1, thread2;

    public static void main(String[] args) throws IOException {
        ClientMessageHandler clientMessagehandler = new ClientMessageHandler();
        ServerMessageHandler serverMessagehandler = new ServerMessageHandler();
        thread1 = new Thread(serverMessagehandler);
        thread2 = new Thread(clientMessagehandler);
        thread2.start();
        thread1.start();
    }

}

class ClientMessageHandler implements Runnable {
    public void run() {
        while (Test.keepRunning) {
            try {
                String msg = Test.msgBuf.take();
                System.out.println("Eating " + msg);
            } catch (InterruptedException ie) {
            }
        }
    }
}

class ServerMessageHandler implements Runnable {
    public void run() {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String in;
        try {
            while (!(in = br.readLine()).equals("quit")) {
                System.out.println("Feeding " + in);
                Test.msgBuf.offer(in);
            }
        } catch (IOException e) {
        }
        Test.keepRunning = false;
        Test.thread2.interrupt();
    }
}

关于java - java中线程之间的通信: stopping a thread if another thread has finished,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2816005/

相关文章:

java - CSS 在运行程序时不起作用,但在我不运行时它确实起作用

java - 有关 hibernate 复合模式的帮助

multithreading - 有没有办法在运行时动态重命名 Jenkinsfile 中的阶段?

python - Django 应用程序中的线程

java - Android中Thread.currentThread().getId()和Process.myTid()的区别

c# - 此方法在哪个线程上运行? C#

java - 如何使我的二维数组在java中水平和垂直显示?

java - 分布式系统中的警报/消息转发

java - 安卓按钮无法点击

java - 中断异常与 while 循环中的 isInterrupted