java线程池

来源:互联网 发布:山东邮政网络培训学院 编辑:程序博客网 时间:2024/05/19 15:42

对java.util.concurrent包中创建线程池的几个方法做简单记录


1.Executors.newFixedThreadPool(int nTreads)

  创建固定线程数,创建的 线程数为nThreads

 下面的例子创建一个固定线程数量的线程池,内有3个线程,分配给了10个任务,3个线程执行这10个任务,当一个线程执行完一个任务之后,再去执行另一个任务,直到所有的任务执行完毕,但线程池中线程不会销毁。

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolTest {  public static void main(String[] args) {//在线程池中创建3个线程 ExecutorService threadPool=Executors.newFixedThreadPool(3);                 //创建10个任务,每个任务会被线程池中的这个三个线程中的其中一个去执行                for (int i = 0; i < 10; i++) {                   final int task=i+1;   threadPool.execute(new Runnable() {@Overridepublic void run() {   for (int j = 0; j < 10; j++) {   try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}      System.out.println(Thread.currentThread().getName()+" of loop "+j+" of task"+task);   }}}); }  }}



2. Executors.newCachedThreadPool()

    创建一个缓存线程池,缓存线程池中线程的数量是不固定的,动态变化有多少个任务创建多少个线程,比如上面的例子创建了10个任务,那么线程池中会创建10个线程分别去处理这10个任务任务执行完后,超时一段时间,多余线程销毁。

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolTest {  public static void main(String[] args) { ExecutorService threadPool=Executors.newCachedThreadPool();                 //十个任务,会创建10个线程分别去执行这十个任务                for (int i = 0; i < 10; i++) {                   final int task=i+1;   threadPool.execute(new Runnable() {@Overridepublic void run() {   for (int j = 0; j < 10; j++) {   try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}      System.out.println(Thread.currentThread().getName()+" of loop "+j+" of task"+task);   }}}); }  }}

3.   Executors.newSingleThreadExecutor()

     创建一个只含有一个线程的线程池,该线程池只含有一个线程,当线程池里的线程被销毁后,线程池又会创建一个线程,替代原来的线程 ,以上面的例子为例,这10个任务只会有一个线程去处理。

4. Executors.newScheduledThreadPool(int nThread).schedule(Runable r,long delay,TimeUnit unit)

    Executors.newScheduledThreadPool(int nThread).scheduleAtFixedRate(Runable r,long delay,long period,TimeUnit unit)

   第一种 创建一个线程池,该线程池创建nThread个线程 定时delay时间去执行任务

   第二种 延时delay时间后执行线程任务,且以固定周期period重复执行

   下面的事例在线程池创建了三个线程,定时10秒后执行线程任务,且2秒后重复执行。

Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {     @Override      public void run() {         System.out.println("bombing..");}}, 10,2, TimeUnit.SECONDS);

threadPool.shutdown();        //当所有线程都空闲的时候,杀死线程,终止程序。
threadPool.shutdownNow();//不管线程中的任务有没有执行完,都杀死线程。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二年级学生贪玩怎么办 一年级孩子做题不认真怎么办 纹身之后喝酒啦怎么办 股票爆仓散户怎么办 小学一年级孩子马虎怎么办 一年级孩子考试马虎怎么办 数学题会还做错怎么办 小孩学习不认真怎么办 又呆又笨怎么办 孩子做数学题马虎怎么办 起泛怎么办小偏方 儿童过敏起疙瘩怎么办 小孩身上起范怎么办 小孩数学很粗心怎么办 小孩数学考试粗心怎么办 孩子太粗心了怎么办 害怕和别人交流怎么办 三岁宝宝挑食怎么办 眼睛有吃马虎怎么办 一年级的孩子粗心怎么办 做考卷很粗心怎么办 孩子叛逆不听他怎么办 学生上课爱动怎么办 孩子不粗心仔细怎么办 脚痒的无法无天怎么办 站的太久脚肿了怎么办 孩子做题粗心大意怎么办 孩子做作业粗心大意怎么办 初中生没有学习兴趣怎么办 孩子没有学习兴趣怎么办 小孩没有学习兴趣怎么办 小孩左手关节肿痛怎么办 我上课老是走神怎么办 孩子听课效率低怎么办 孩子上课不会听课怎么办 怀孕了腿肿怎么办 孕后期手脚肿怎么办 中考成绩太差怎么办 小孩子调皮捣蛋不听话怎么办 小孩总是拧脖子怎么办 腿骨折后脚肿怎么办