【求解】LinkedList实现生产者消费者产生的bug!
代码如下,用idea直接运行,消费者就拿不到东西,用debug运行,消费者就能拿到东西!请问原因在什么地方?
debug模式结果,判断size为1,可以拿到AAA,
#笔试题目##Java##题解##笔经#import java.util.LinkedList; /** * 用LinkedList实现生产者消费者, */ public class ProviderConsumer { public static void main(String[] args) throws InterruptedException { System.out.println("主线程开始"); LinkedList<Product> list=new LinkedList<>(); Producer producer = new Producer(list); Consumer consumer = new Consumer(list); Thread t1=new Thread(producer); Thread t2=new Thread(consumer); System.out.println("list: "+list); t2.start(); Thread.sleep(10); t1.start(); //Thread.sleep(30000); System.out.println("主线程结束了"); } } /** * 生产者 */ class Producer implements Runnable{ LinkedList<Product> list; public Producer(LinkedList<Product> list) { this.list = list; } @Override public void run() { System.out.println("线程producer开始: "); System.out.println("list: "+list); Product product1=new Product(); product1.setName("AAA"); list.offerLast(product1); System.out.println("生产了" + product1.getName()); System.out.println("list: "+list); } } /** * 消费者 */ class Consumer implements Runnable{ LinkedList<Product> list; public Consumer(LinkedList<Product> list) { this.list = list; } @Override public void run() { System.out.println("线程Consumer开始: "); System.out.println("list: "+list); while (true){ if(list.size()>0){ System.out.println("消费了:"+list.pollFirst()); System.out.println("list: "+list); } } } } /** * 产品 */ class Product{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Product{" + "name='" + name + '\'' + '}'; } }正常运行结果,消费者一直无法拿到AAA,判断size一直为0,
debug模式结果,判断size为1,可以拿到AAA,