publicclassFixedSizeQueue{privateint[]queue;privateintfront;privateintrear;privateintsize;privateintcapacity;publicFixedSizeQueue(intcapacity){this.capacity = capacity;queue=newint[capacity]; front =0; rear =-1; size =0; }publicvoidenqueue(intitem){if(isFull()) {thrownewRuntimeException("Queue ...
下面是一个使用FixedSizeQueue类的示例代码: publicclassMain{publicstaticvoidmain(String[]args){FixedSizeQueue<Integer>queue=newFixedSizeQueue<>(3);queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);System.out.println(queue.dequeue());// 输出:1System.out.println(queue.dequeue());// 输出:2que...
下面是一个使用固定长度队列的示例代码: FixedLengthQueue<Integer>queue=newFixedLengthQueue<>(5);queue.add(1);queue.add(2);queue.add(3);queue.add(4);queue.add(5);System.out.println(queue.getFront());// 输出:1queue.add(6);System.out.println(queue.getFront());// 输出:2queue.remove()...
SynchronizedQueue():特殊的BlockingQueue,对其的操作必须是放和取交替完成。 3. 自定义线程池(ThreadPoolExecutor和BlockingQueue连用): 自定义线程池,可以用ThreadPoolExecutor类创建,它有多个构造方法来创建线程池。 常见的构造函数:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, Time...
ArrayBlockingQueue 它是一个由数组实现的阻塞队列,FIFO。 LinkedBlockingQueue 它是一个由链表实现的阻塞队列,FIFO。 吞吐量通常要高于ArrayBlockingQueue。 fixedThreadPool使用的阻塞队列就是它。 它是一个无界队列。 SynchronousQueue 它是一个没有存储空间的阻塞队列,任务提交给它之后必须要交给一条工作线程处理;如果...
通常情况下,核心线程池大小可以设置为 CPU 核心数 +1,最大线程池大小可以设置为 CPU 核心数 * 2。同时,建议使用无界的 LinkedBlockingQueue 阻塞队列,以避免丢失任务。 其它应用场景: 对于各种不同的场景,应该根据实际情况进行参数的设置。比如生产者-消费者问题,可以使用 FixedThreadPool,保证消费者线程数量少于...
publicclassDelayTest{privatestaticDelayQueue<TaskInfo> queue =newDelayQueue<>();//延迟队列privatestaticExecutorServicees=Executors.newFixedThreadPool(3);//3个线程的线程池publicstaticvoidmain(String[] args){while(true) {try{if(queue.size() <=0){//获取任务放入队列getTask();if(queue.size() <=...
// 手写线程池 final Integer corePoolSize = 2; final Integer maximumPoolSize = 5; final Long keepAliveTime = 1L; // 自定义线程池,只改变了LinkBlockingQueue的队列大小 ExecutorService executorService = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, ...
首先介绍一下第一个被测试的对象java.util.concurrent.LinkedBlockingQueue,分解名字可以得到这是个由链表实现的阻塞单向的对象。官方给的定义是: 基于链接节点的可选有界阻塞队列。此队列对元素进行 FIFO(先进先出)排序。队列的头部是在队列中时间最长的元素。队列的尾部是在队列中时间最短的元素。新元素被插入到队列...
2.1 定长线程池(FixedThreadPool) 创建方法的源码: public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactor...