The code below doesn't ever print Done
. However, if I uncomment System.out.println(list.size());
it finishes. Why does this happen?
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.LinkedBlockingQueue;
public class Test3 {
static BlockingQueue<String> blockingQueue;
static List<String> list = new ArrayList<>();
static void run() {
while (true) {
try {
String s = blockingQueue.take();
Thread.sleep(1000);
list.add(s);
}catch (InterruptedException e){}
}
}
public static void main(String[] args) {
blockingQueue = new LinkedBlockingQueue<>();
blockingQueue.add("test1");
blockingQueue.add("test2");
blockingQueue.add("test3");
CompletableFuture.runAsync(() -> run());
while (list.size() < 3) {
// uncomment the line below to make it finish
//System.out.println(list.size());
}
System.out.println("Done");
}
}
I don't seem to have any idea.