自定义线程---无界队列作为承装任务

本文介绍了一个使用无界队列的线程池实现案例,详细解释了当线程数量达到核心线程数时,新任务如何被放入队列等待执行的过程。并演示了如何通过Java代码配置和运行这样一个线程池。

说明:

1. 使用无界队列时不会存在任务存入队列失败的情况。当有新的任务到来,系统线程小于coresize则会新建线程执行任务。当达到corsize,就不会在新增线程。若有新的任务来了,若没有新的线程资源则任务直接进入队列进行等待。若任务的创建和和处理任务的线程差异较大,无界队列将会保存快速增长,知道耗尽系统内存。

注意:“10”,maxsize,在无界队列中,该参数可以忽视。

package cm.pool;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;




public class UseTHreadpoolExecutor_2 implements Runnable {
	
	private static AtomicInteger count=new AtomicInteger(0);
	
	@Override
	public void run() {
		try {
			int temp=count.incrementAndGet();
			System.out.println(Thread.currentThread().getName()+"-----任务:"+temp);
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws InterruptedException {
		BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();

		ExecutorService pool = new ThreadPoolExecutor(5, // corePoolSize,
				10, // maximumPoolSize,
				120l, // keepAliveTime,
				TimeUnit.SECONDS, // unit,
				queue);
		for (int i = 0; i < 20; i++) {
			pool.execute(new UseTHreadpoolExecutor_2());
		}
		Thread.sleep(2000);
		System.out.println("queue 容量:"+queue.size());
		Thread.sleep(2000);
		pool.shutdown();
	}
	
}

 

转载于:https://my.oschina.net/2286252881/blog/863702

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值