我正在尝试使用两个线程,形成第一个获取输入和第二个过程输入。 把问题我找不到如何在不使用回调的情况下从线程返回值 一个回调不像一个线程(我认为)所以任何好主意如何做到这一点,谢谢。
Thread t1 = new Thread() {
public void input() {
while (true) {
while (true) {
/*
* get input using Scanner
*/
}
}
}
};
t1.start();
Thread t2 = new Thread() {
public void input() {
while (true) {
while (true) {
/* get input form above than
* swith something or do something
*/
}
}
}
};
t2.start();
答案 0 :(得分:2)
使用共享的BlockingQueue。第一个线程(生产者)将输入添加到队列,第二个(消费者)从队列中获取它们。正如其名称所示,BlockingQueue正在阻塞。因此,消费者从队列中获取下一个元素将一直阻塞,直到队列实际包含一个元素。
答案 1 :(得分:0)
第二个帖子应该在第一个帖子有可用内容时引发一个事件。在创建第二个线程时,让第一个线程将自己添加为侦听器,然后第二个线程使用它来表示事件。
这谈到了摇摆,但你可以使用通用事件和听众。
答案 2 :(得分:0)
如果您只有一个线程,则可能需要使用java.util.concurrent.FutureTask(假设您使用的是Java 1.5或更高版本)。
答案 3 :(得分:0)
阻塞队列是这种情况下的首选设计
生成生产者线程并让他们将数据插入队列。另一个线程(或主线程),消费者,将“旋转锁定”观察队列中的数据:一旦数据到达,消费者将抓住它并使用它。
因此,您的线程通过将数据插入此公共数据结构(队列)来“返回”数据。
不要忘记使用互斥锁(它是一个关键部分)保护您的队列,或者多个线程可以同时使用(读/写)队列数据结构导致所有类型的奇怪行为,如果是一个普通的SIGSEGV信号,你很幸运:-)