【发布时间】:2024-05-16 16:45:02
【问题描述】:
我一直在做一个有两个线程的小项目。 一个生成内容并将其放置在队列中(在静态上下文中)。 另一个线程运行并等待队列中的内容做某事。
问题:
当第二个线程正在等待将某些东西放入队列中时,它似乎没有运行,我将尝试显示这一点。
我只是好奇这里发生了什么。
_slices 是一个队列:Queue<E> _slices = new LinkedList<E>();
线程 2 run():
while ( true ) {
if ( !Main._slices.isEmpty() ) {
System.out.println( "Something in the Queue!" );
} else if ( Main.doneQueuing ) {
break;
}
}
一旦将元素添加到队列中,上面的代码将不会执行任何操作。
现在,这段代码可以工作了:
while ( true ) {
System.out.println( "As long as a process is done here it works" );
if ( !Main._slices.isEmpty() ) {
System.out.println( "Something in the Queue!" );
} else if ( Main.doneQueuing ) {
break;
}
}
【问题讨论】:
-
这意味着队列没有被填充。检查填充队列的代码并确保两个队列引用都指向同一个队列实例。
-
_slices的类型是什么? -
@AniketThakur 队列与此无关,正如我上面所说,有一个案例有效。
-
@nosid 它是队列
-
我的意思是队列
_slices总是空的。因此代码流永远不会进入if语句。因此检查填充此队列的代码。
标签: java multithreading parallel-processing