【发布时间】:2018-01-11 06:23:00
【问题描述】:
我有 6 个线程访问一个公共队列容器,它们在他们的 run() 方法中有这个:
if (queue.size() != 0) {
Element e = queue.remove();
//code
它几乎每次都按预期工作,但是,有时线程会在 if check 和 remove() 方法之间切换,因此其他一些线程获取元素并且该线程获取 NoSuchElementException。我如何确保这两行代码之间的线程不会切换?
【问题讨论】:
-
@litelite,使用线程安全队列不能替代同步使用队列的高级代码。制作一个线程安全的程序并不像从线程安全的对象构建它那么简单。
-
@jameslarge 由于队列似乎是线程之间共享的唯一资源,因此对于他的情况来说已经足够了。但是,将需要一些小时间来使代码适应新队列。这也是其他两个答案所说的......
标签: java multithreading