简单线程是串联运行的吗? (第二个线程在第一个线程停止之前不会运行)

时间:2012-11-21 08:23:23

标签: java multithreading

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

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

线程1)

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;
      }
   }
}

线程2)

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

2 个答案:

答案 0 :(得分:5)

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

使用start()方法启动线程, run()方法(实际上不启动线程)。

new InterruptionThread().start();
new ReadingThread().start();

答案 1 :(得分:0)

我认为您的问题是生产者消费者问题类型。 所以建议你使用BlockingQueue。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html

而不是直接处理线程;如果你使用Executor Framework会很容易;通过这种方式,线程管理将变得非常简单。