【发布时间】:2017-08-10 20:52:34
【问题描述】:
我有几个线程(生产者和消费者)的 FizzBuzz 问题 我在网上找到了这个解决方案:https://gist.github.com/masudak/5098917 但我担心一个特定的情况,一个糟糕的上下文切换,其中'isStop' 是的,但并非所有生产者都完成了将他们的号码添加到队列中。 这是一个真正的问题吗?还是我错过了什么?
public static AtomicInteger counter = new AtomicInteger(0);
public static ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<Integer>();
public static volatile boolean isStop = false;
public static class Producer implements Runnable{
@Override
public void run() {
while ( true ) {
Integer counterValue = counter.incrementAndGet();
if (counterValue <= 100) {
queue.add(counterValue);
} else {
isStop = true;
break;
}
}
}
}
public static class Consumer implements Runnable{
@Override
public void run() {
while ( true ) {
Integer counterValue = queue.poll();
if ( counterValue == null ){
if(isStop){
break;
}
continue;
}
fizzBuzz(counterValue);
}
}
private void fizzBuzz(Integer value){
if( value % 15 == 0 ){
System.out.println("FizzBuzz:" + value);
} else if( value % 3 == 0 ){
System.out.println("Fizz:" + value);
} else if( value % 5 == 0 ){
System.out.println("Buzz:" + value );
} else {
System.out.println(value);
}
}
}
【问题讨论】:
-
那不是 C++。
-
FizzBuzz 曾经是一个很好的、简单的基本编程知识测试,因此您可以快速有效地淘汰薄弱的求职者。为什么以 Crom 的名义,人们必须添加线程?
-
@user4581301。淘汰弱势申请人。任何爱上这个 BS 并尝试使用 Threads 实现它的人都会立即被拒绝。
-
Dima ,即使缩进很差,代码也比图片好得多。很少有编译器可以处理从 jpg 构建,所以现在任何想要尝试代码的人都必须将其输入到他们的 IDE 中,并且可能会出现转录错误。更糟糕的是,他们可能不会打扰,而是选择投反对票并继续提出更受欢迎的问题。
-
这是指向非现场资源的链接。无论出于何种原因,当该链接失效时,您的问题对未来研究类似问题的人的使用就会减少。
标签: java multithreading