3

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

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

线程 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);
      }
   }
}
4

2 回答 2

5

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

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

new InterruptionThread().start();
new ReadingThread().start();
于 2012-11-21T08:26:18.790 回答
0

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

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

也不是直接处理线程;如果你使用 Executor Framework 会很容易;这样线程管理将变得非常容易。

于 2012-11-21T08:49:55.043 回答