关于4个线程池的创建规则以及使用方式----新人报到,2019.2.26

关于4个线程池的创建规则以及使用方式----新人报到,2019.2.26

刚开始学习java,在此记录一下学习的内容

1.定长线程池:用于周期性地执行任务

public class ScheduledThreadPool {
public static void main(String[] args) {

    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);

for (int i = 0;i<10;i++){

int finalI = i;
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {

        System.out.println("启动周期任务");
        System.out.println("i"+ finalI);

    }
},1000,2000,TimeUnit.MILLISECONDS);
//第一次启动任务的间隔,下一次启动任务的间隔,时间单位

2.单线线程池:对于任务,一个一个解决

public static void main(String[] args) {

    ExecutorService executorService = Executors.newSingleThreadExecutor();//建立单线程池

    executorService.execute(new Runnable() { //执行单线程
        @Override
        public void run() {

            System.out.println("单线程开始执行");
            for (int i = 1;i<10;i++) {
                try {
                    Thread.sleep(2000); //在线程池中用Thread.sleep
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("i:"+i);
            }

            System.out.println("单线程执行结束");


        }
    });
}

}

3.多线线程池:对于任务,一次性提供多个线程,提高工作效率

public class FixedThreadPool {

public static void main(String[] args) {

    ExecutorService e = Executors.newFixedThreadPool(5);

    //这种写法可以一下子把100个数字输出,看不出与单线程池的区别,时间是变快了,但是很难分辨

// e.execute(new Runnable() {
// @Override
// public void run() {
// System.out.println(“多线程池开始启动”);
// for (int i = 0;i<100;i++){
//
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

// System.out.println(“i的值为:”+i);
// }
// System.out.println(“多线程池执行结束”);
}
// });

//这种写法可以清楚的看到多线程是5个5个一起输出的
for (int t =100;t>0;t–){

        int finalT = t;
        e.execute(new Runnable() {
            @Override
            public void run() {

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                System.out.println("t"+ finalT);
            }
        });
    }
}

}

4.缓存线程池:对于任务,可以来多少解决多少

public class CachedThreadPool {

public static void main(String[] args) {
    ExecutorService e = Executors.newCachedThreadPool();//创建缓存线程

    for (int i = 0; i <= 100; i++) {
        int finalI = i;
        e.execute(new Runnable() { //启动缓存线程
            @Override
            public void run() {
                System.out.println("缓存线程启动");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                System.out.println("i:"+ finalI);
            }
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值