zoukankan      html  css  js  c++  java
  • java线程池笔记

    线程池的唯一好处:
    线程池给开发者带来的唯一好处是允许多个线程按照组的模式进行程序的处理,这样在某一个业务逻辑复杂的环境下性能就会得到很好的提升

    线程池:将多个线程封装在一起执行

    从JDK1.5之后追加了一个并发访问的程序包:java.util.concurrent,对于此线程池操作的核心类和接口就定义在
    此包当中,这里面有两个核心的接口:
    1、普通的执行线程池定义:java.util.concurrent.ExecutorService
    2、调度线程池(某些操作可以自动定时完成):java.util.concurrent.ScheduleExecutorService
    如果要想进行线程池的创建,一般可以使用java.util.concurrent.Executors类完成
    3、创建无大小限制的线程池:
    4、创建固定大小的线程池
    5、单线程池
    6、创建定时调度池

    二、创建各种线程池
    1、创建无限大小的线程池
    public class TestDemo {
    public static void main(String[] args) throws Exception{
    //现在创建了一个线程池的模型,但是里面现在没有线程
    ExecutorService executorService = Executors.newCachedThreadPool();
    for(int x = 0 ; x < 10 ; x++){
    Thread.sleep(200);
    int index = x;
    executorService.submit(() -> {
    System.out.println(Thread.currentThread.getName() + "、x=" + x);
    });//执行线程的操作
    }
    executorService,shutdown();//关闭线程池
    }
    }
    2、创建单线程池
    public class TestDemo {
    public static void main(String[] args) throws Exception{
    //现在创建了一个线程池的模型,但是里面现在没有线程
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    for(int x = 0 ; x < 10 ; x++){
    int index = x;
    executorService.submit(() -> {
    System.out.println(Thread.currentThread.getName() + "、x=" + x);
    });//执行线程的操作
    }
    executorService,shutdown();//关闭线程池
    }
    }
    3、创建固定大小的线程池
    public class TestDemo {
    public static void main(String[] args) throws Exception{
    //现在创建了一个线程池的模型,但是里面现在没有线程
    ExecutorService executorService = Executors.newFixedThreadPool(3);
    for(int x = 0 ; x < 10 ; x++){
    int index = x;
    executorService.submit(() -> {
    System.out.println(Thread.currentThread.getName() + "、x=" + x);
    });//执行线程的操作
    }
    executorService,shutdown();//关闭线程池
    }
    }
    4、定时调度池
    public class TestDemo {
    public static void main(String[] args) throws Exception{
    //创建一个具备有三个线程池大小的定时调度池
    ScheduledExecutorService executorService = Executors.newScheduledThreadPool(3);
    for(int x = 0 ; x < 10 ; x++){
    Thread.sleep(3000);
    int index = x;
    executorService.scheduleAtFixedRate(new Runnable(){
    @Override
    Public void run(){
    System.out.println(Thread.currentThread.getName() + "、x=" + index);
    }
    },3,2,TimeUnit.SECONDS);//使用的是一个秒的单位,表示3秒后开始执行,而后每2秒执行一次
    }
    executorService,shutdown();//关闭线程池
    }
    }

  • 相关阅读:
    5.19 省选模拟赛 T1 小B的棋盘 双指针 性质
    5.15 省选模拟赛 容斥 生成函数 dp
    5.15 省选模拟赛 T1 点分治 FFT
    5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
    luogu P4929 【模板】舞蹈链 DLX
    CF 878E Numbers on the blackboard 并查集 离线 贪心
    5.10 省选模拟赛 拍卖 博弈 dp
    5.12 省选模拟赛 T2 贪心 dp 搜索 差分
    5.10 省选模拟赛 tree 树形dp 逆元
    luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
  • 原文地址:https://www.cnblogs.com/jiehanshi/p/10779619.html
Copyright © 2011-2022 走看看