java线程池创建方式

在创建线程的使用,可以借用不同的Thread类解决,我们可以根据线程池的大小和其中的线程数量进行选择。这里给大家带来了四种方式:newCachedThreadPoolnewFixedThreadPoolnewScheduledThreadPoolnewSingleThreadExecutor。在接下来的内容中,我们会分别就这个方式的类型和代码示例带来分享。

1. newCachedThreadPool

创建一个线程池,如果线程池中的线程数量过大,它可以有效的回收多余的线程,如果线程数不足,那么它可以创建新的线程。

publicstaticvoidmethod()throwsException{ExecutorServiceexecutor=Executors.newCachedThreadPool();for(inti=0;i<5;i++){finalintindex=i;Thread.sleep(1000);executor.execute(newRunnable(){@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName()+""+index);}});}}

2. newFixedThreadPool

创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的大小。线程池的大小一旦达到值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

publicstaticvoidmethod_01()throwsInterruptedException{ExecutorServiceexecutor=Executors.newFixedThreadPool(1);for(inti=0;i<10;i++){Thread.sleep(1000);finalintindex=i;executor.execute(()->{try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+""+index);});}executor.shutdown();}

3. newScheduledThreadPool

创建一个大小的线程池。此线程池支持定时以及周期性执行任务的需求。

publicclassTestScheduledThreadPoolExecutor{

publicstaticvoidmain(String[]args){

ScheduledThreadPoolExecutorexec=newScheduledThreadPoolExecutor(1);

exec.scheduleAtFixedRate(newRunnable(){//每隔一段时间就触发异常

@Override

publicvoidrun(){

//thrownewRuntimeException();

System.out.println("================");

}

},1000,5000,TimeUnit.MILLISECONDS);

exec.scheduleAtFixedRate(newRunnable(){//每隔一段时间打印系统时间,证明两者是互不影响的

@Override

publicvoidrun(){

System.out.println(System.nanoTime());

}

},1000,2000,TimeUnit.MILLISECONDS);

}

}

4.newSingleThreadExecutor

单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务。

publicclassMyThreadextendsThread{

@Override

publicvoidrun(){

System.out.println(Thread.currentThread().getName()+"正在执行。。。");

}

}

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容