我一个接一个地开始两个线程。 第一个线程是从输入读取循环,另一个是在循环中检查某些条件 向对方发送了一个中断。
问题是我先启动的两个线程中的任何线程都不会让另一个线程停止。 如果我开始读取从不运行另一个线程,直到它完成,如果我启动另一个线程正在检查循环中的条件,它不会在代码中向前移动,直到条件为真并退出循环。 这样做的正确方法是什么? 示例代码如下:
线程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);
}
}
}
答案 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会很容易;通过这种方式,线程管理将变得非常简单。