线程

来源:互联网 发布:linux创建多层文件夹 编辑:程序博客网 时间:2024/06/05 19:46
①newSingleThreadExecutor
单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务
②newFixedThreadExecutor(n)
固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行
③newCacheThreadExecutor(推荐使用)
可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。
④newScheduleThreadExecutor
大小无限制的线程池,支持定时和周期性的执行线程

publicclassMyThread extends Thread {    @Override    publicvoid run() {        System.out.println(Thread.currentThread().getName() + "执行中。。。");    }}//newCacheThreadExecutorpublicclass TestCachedThreadPool {    publicstaticvoid main(String[] args) {        //创建一个可重用固定线程数的线程池        ExecutorService pool = Executors.newCachedThreadPool();        //创建实现了Runnable接口对象        Thread t1 = new MyThread();        Thread t2 = new MyThread();        Thread t3 = new MyThread();        Thread t4 = new MyThread();        Thread t5 = new MyThread();        //将线程放入池中进行执行        pool.execute(t1);        pool.execute(t2);        pool.execute(t3);        pool.execute(t4);        pool.execute(t5);        //关闭线程池        pool.shutdown();    }}result:pool-1-thread-1执行中。。。pool-1-thread-2执行中。。。pool-1-thread-4执行中。。。pool-1-thread-3执行中。。。pool-1-thread-5执行中。。。


---------继承---------class Thread1 extends Thread{    private String name;        public Thread1(String name) {           this.name=name;       }    public void run() {        for (int i = 0; i < 5; i++) {            System.out.println(name + "运行  :  " + i);            try {                sleep((int) Math.random() * 10);            } catch (InterruptedException e) {                e.printStackTrace();            }        }           }}public class Main {    public static void main(String[] args) {        Thread1 mTh1=new Thread1("A");        Thread1 mTh2=new Thread1("B");        mTh1.start();        mTh2.start();    }}---------实现------------------class Thread2 implements Runnable{    private int count=15;    @Override    public void run() {          for (int i = 0; i < 5; i++) {              System.out.println(Thread.currentThread().getName() + "运行  count= " + count--);                try {                    Thread.sleep((int) Math.random() * 10);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            }    }public class Main {    public static void main(String[] args) {                Thread2 my = new Thread2();            new Thread(my, "C").start();            new Thread(my, "D").start();            new Thread(my, "E").start();    }}





原创粉丝点击