线程并发库<二>_线程池

线程池

六、线程池

   前言:在以前创建一个线程时,总是要手动创建一个线程,然后启动运行;并且一旦线程运行结束后,就作废;当要运行的线程数过多时,这种创建方式的弊端便会很明显。就好比一个公司接待客户,当每个客户需要服务时,就去招聘一个员工来给该客户服务,当服务完毕后就解雇该员工,这显然不符合客观事实。同理,当线程数过多时,传统的创建线程方式有局限性。

   JDK1.5版本以后,Java提供了线程池,对应的APIExecutors,创建一个线程池时,可以指定里面含有几个线程。当要执行某些任务时,可以直接把这些任务放到线程池中,即可。线程池会按照它容量的大小循环执行完这些任务。就好比一个公司中有固定的员工数量,不管来了多少的客户,只要该公司的员工有空,都会去接待这些客户,当员工没空时,客户等待,这就提高了一个员工的使用次数,同理,线程池中的线程也可以使用多次。

   在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务后,它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,这就是封装。任务是提交给整个线程池,一个线程同时只能执行一个任务,但可以同时向一个线程池提交多个任务。

更多详细的介绍请查阅API文档,在此只做大概的介绍,下面代码体现:

package itheima.thread.day01;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ThreadPoolTest {

	public static void main(String[] args) {
//		工具类一般带s,里面提供一大堆静态方法
//		固定线程数的线程池
//		ExecutorService threadPool= Executors.newFixedThreadPool(3);
//		带缓冲的线程池
//		ExecutorService threadPool= Executors.newCachedThreadPool();
//		创建单独的一个线程,没有池的概念
		ExecutorService threadPool= Executors.newSingleThreadExecutor();
		
//		线程池中只有三个线程,只能三个服务完了才服务其他的线程
		for(int i=1;i<=10;i++){
			final int task = i;
			threadPool.execute(new Runnable(){
			@Override
			public void run() {
				for(int j=1;j<=10;j++){
					try {
						Thread.sleep(20);
					} catch (InterruptedException e) {
						
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+" loop of "+j+" for task of "+task);
				}	
				}	
			});
		}
//		关闭线程池中的所有线程
//		threadPool.shutdown();
		
//		定时器
//		Executors.newScheduledThreadPool(3).schedule(
		Executors.newScheduledThreadPool(3).scheduleAtFixedRate(
				new Runnable() {
					@Override
					public void run() {
						System.out.println("bombing......");
					}
				}, 
				2,
				3,
				TimeUnit.SECONDS);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值