Java 简单线程串联运行?(第二个线程直到第一个线程停止才运行)

Java 简单线程串联运行?(第二个线程直到第一个线程停止才运行),java,multithreading,Java,Multithreading,我正在一个接一个地开始两个线程。 第一个线程在循环中读取输入,另一个线程检查循环中的某些条件以 向对方发送了一个中断 问题是,这两个线程中的任何一个我先启动,它都不会让另一个停止。 如果我开始读入,则在另一个线程完成之前,不会运行该线程;如果我启动另一个线程,则该线程正在检查循环中的条件,并且在条件为真并退出循环之前,它不会在代码中向前移动。 正确的方法是什么? 示例代码如下: 线程1) 线程2) 这听起来好像您没有以正确的方式启动线程 使用start()方法来启动线程,而不是run()方法(实

我正在一个接一个地开始两个线程。 第一个线程在循环中读取输入,另一个线程检查循环中的某些条件以 向对方发送了一个中断

问题是,这两个线程中的任何一个我先启动,它都不会让另一个停止。 如果我开始读入,则在另一个线程完成之前,不会运行该线程;如果我启动另一个线程,则该线程正在检查循环中的条件,并且在条件为真并退出循环之前,它不会在代码中向前移动。 正确的方法是什么? 示例代码如下:

线程1)

线程2)


这听起来好像您没有以正确的方式启动线程

使用
start()
方法来启动线程,而不是
run()
方法(实际上并不启动线程)


我认为你的问题属于生产者-消费者问题类型。 因此,我建议您使用BlockingQueue


也不是直接处理线程;如果您使用Executor框架,这将很容易;这样,线程管理将变得非常简单。

至少您可以使代码可读:-(如何启动线程?如何启动线程?能否向我们展示此代码?您应该调用
start()
,而不是
run())
直接阅读。阅读有关线程的初学者教程。您应该了解线程状态和转换。
public class InterruptionThread extends Thread {
   public void run() {

      while (condition not true) {
         try {
            sleep(1000);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }

      }
      if (condition true) {
         do some work
         return;
      }
   }
}
public class ReadingThread extends Thread{

   public void run() {
      int input;
      while (true) {
         try {
            input = stdInput.read();
         } catch (IOException e) {
            e.printStackTrace();
            return;
         }
         System.out.print((char) input);
      }
   }
}
new InterruptionThread().start();
new ReadingThread().start();