在创建线程的使用,可以借用不同的Thread类解决,我们可以根据线程池的大小和其中的线程数量进行选择。这里给大家带来了四种方式:newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor。在接下来的内容中,我们会分别就这个方式的类型和代码示例带来分享。
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
暂无评论内容