java线程池

来源:互联网 发布:mac重装后是英文界面 编辑:程序博客网 时间:2024/05/16 14:45

    简介

在jdk1.5之前java的多线程方面是很弱的,自jdk1.5开始增加了一个java.util.concurrent包,该包下都是操作多线程的并发库。

线程池的作用

在java中,如果请求到了就为其开启一个线程,频繁开启和销毁一个线程是非常占用资源的,系统开销很大,于是就有了新技术--线程池,在传统的线程中,开启一个线程只能为其分配 一个线程任务,任务运行完了线程也就要死了,线程池能够”循环“运行任务,增加一个线程任务,不再是交给线程去运行,而是交给一个线程池去运行。如果线程池繁忙那就等待。这样可以限制系统中线程的数量。

为什么要使用线程池

1.减少频繁开启和销毁线程,多个工作线程可以重复使用,可以次运行任务。
2.可以限制系统中线程的数量,可以根据系统自身的配置来手动设置线程的数量。避免许多问题。


三种创建线程池的方法

 ExecutorService threadPool= Executors.newCachedThreadPool();//创建缓存线程池     threadPool=Executors.newSingleThreadExecutor();//创建单例线程池     threadPool=Executors.newFixedThreadPool(10);//创建固定大小线程池。    for(int i=1;i<=10;i++){    final int  task =i;    threadPool.execute(    new Runnable(){@Overridepublic void run() { for(int i =1;i<=10;i++){ System.out.println(Thread.currentThread().getName()+" is looping of "+i+", task  of "+ task); }}});}    threadPool.shutdown();//关闭线程池        

另外还有个定时器:

    //定义器    Executors.newScheduledThreadPool(3).schedule(    new Runnable(){@Overridepublic void run() {System.out.println("bombing !");}},    10,    TimeUnit.SECONDS    );    Executors.newScheduledThreadPool(3).scheduleAtFixedRate(    new Runnable(){@Overridepublic void run() {System.out.println("bombing !");}},    2,    4,       TimeUnit.SECONDS);




0 0
原创粉丝点击