}publicstaticvoidmain(String[] args)throwsInterruptedException {//创建一个容量是3的阻塞队列LinkedBlockingQueueBlockingQueue<String> blockingDeque =newLinkedBlockingQueue<String>(3);//创建一个插入数据线程PutThread putThread =
第一次任务执行前的executorjava.util.concurrent.ThreadPoolExecutor@30f39991[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0] 1 2 3 4 4 5 3 2 3 3 第一次任务执行完毕后的executorjava.util.concurrent.ThreadPoolExecutor@30f39991[Running, pool size = 5,...
new Thread(new Runnable() { @Override public void run() { int cnt = 0; while (cnt < infoNum) { try { queue.take(); } catch (InterruptedException e) { e.printStackTrace(); } cnt++; } long endTime = System.currentTimeMillis(); System.out.println("消耗时间 : " + (endTime - ...
代码案例下面使用LinkedBlockingQueue类模拟了一个生产者-消费者场景,其中生产者生成整数并将它们放入队列,而消费者从队列中取出整数并处理它们,如下:import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; // 生产者类,用于生成数据并放入队列 classProducerimplementsRunnable...
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) { ...
LinkedBlockingQueue.java的完整源码如下: View Code 下面从LinkedBlockingQueue的创建,添加,删除,遍历这几个方面对它进行分析。 1. 创建 下面以LinkedBlockingQueue(int capacity)来进行说明。 publicLinkedBlockingQueue(intcapacity) {if(capacity <= 0)thrownewIllegalArgumentException();this.capacity =capacity; ...
publicfinal longawaitNanos(long nanosTimeout)throws InterruptedException{//如果中断标志被设置了,则抛异常if(Thread.interrupted())thrownewInterruptedException();//添加当前线程节点到条件队列,Node node=addConditionWaiter();//当前线程释放独占锁int savedState=fullyRelease(node);long lastTime=System.nanoTime()...
2.2.11 Java并发集合——LinkedBlockingQueue 前言 在前面的文章ArrayBlockingQueue中,已经对JDK中的BlockingQueue中的做了一个回顾,同时对ArrayBlockingQueue中的核心方法作了说明,而LinkedBlockingQueue作为JDK中BlockingQueue家族系列中一员,由于其作为固定大小线程池(Executors.newFixedThreadPool())底层所使用的阻塞队列,...
queue.remove();// Exception in thread "main" java.util.NoSuchElementException} poll()方法:非阻塞获取队列头元素,如果队列为空,直接返回null。 publicstaticvoidmain(String[] args){ BlockingQueue<String> queue =newLinkedBlockingQueue<>(1);Stringpoll=queue.poll(); ...
Java线程池中的固定大小线程池就是基于LinkedBlockingQueue实现的: # 创建固定大小的线程池 ExecutorService executorService = Executors.newFixedThreadPool(10); 对应的源码实现: # 底层使用LinkedBlockingQueue队列存储任务 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(...