package com.neutron.t22;
import java.util.Random;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* Queue
* 1.并发加锁 ConcurrentLinkQueue
* 2.阻塞式 LinkBlockingQueue 无界队列,什么时候内存填满,就结束
* ArrayBlockQueue 有界队列,有个数限制
*/
public class T225LinkBlockingQueue {
static LinkedBlockingQueue queue = new LinkedBlockingQueue();
static Random r = new Random();
public static void main(String[] args) {
// 1个线程添加
new Thread(() -> {
for (int i = 0; i < 100; i++) {
try {
queue.put("i" + i); // put 如果满了,就会等待
TimeUnit.MICROSECONDS.sleep(r.nextInt(500));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "p1").start();
// 10个线程获取数据
for (int i = 0; i < 5; i++) {
new Thread(() -> {
while (true) {
try {
// take,如果空了,就会等待
System.out.println(Thread.currentThread().getName() + " take " + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "c" + i).start();
}
}
}
thread38 - LInkBlockingQueue
最新推荐文章于 2024-03-15 22:29:28 发布