JAVA原生线程池的基本了解

来源:互联网 发布:java调用scala程序 编辑:程序博客网 时间:2024/06/06 20:23

一、线程池

        线程是程序的最小执行单位,当有需要大量而且需要短时间执行的程序的时候就需要用到线程池,因为线程的每次创建和销毁是需要开销的,如果线程创建和消耗需要的时间和开销远远的大于了线程本来执行它功能所需要的时间和开销,那么每次都创建一个线程这样是不划算的。我们可以在一开始的时候就将很多的线程创建出来,然后在每次需要的时候直接将参数传入,直接在线程池里拿出一个线程执行。执行完后又放到线程池里,这样可以大大的加快访问的时间和速度。并发可以加快处理速度


java自带的线程池有这几种

1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。 

2、newCachedThreadPool

3、newSingleThreadExecutor

4、newScheduleThreadPool

</pre><span style="font-size:18px;"></span><p><span style="font-size:18px;">线程类:</span></p><p class="p1"><pre name="code" class="java">public class MyThread implements Runnable{String name;public  MyThread(String name){this.name=name;}@Override public void run(){System.out.println("Thread"+name+" Start excution");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("Thread"+name+" excution Over ");}}
public static void main(String[] args){ExecutorService threadPool= Executors.newFixedThreadPool(4);for(int i=0;i<5;i++){MyThread cur=new MyThread(String.valueOf(i));threadPool.execute(cur);}}

输出结果:

Thread0 Start excutionThread2 Start excutionThread1 Start excutionThread3 Start excutionThread0 excution Over Thread3 excution Over Thread4 Start excutionThread1 excution Over Thread2 excution Over Thread4 excution Over 

分析一下:我设置FixedThreadPool的线程池的大小是4,那么在前4个线程提交之后就会立刻执行,而第5个线程提交就会放在等待队列里面,等线程池里的线程执行完后就提交开始执行。然后最后执行完。FixedThreadPool适合慢慢启动,访问慢慢增大的情况,在达到最大的最高峰的时候就停止,保持最大的线程数。

0 0