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();//关闭线程池
    }
    }

  • 相关阅读:
    HDU 4607 Park Visit (DP最长链)
    HDU 4607 Park Visit (DP最长链)
    POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)
    POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)
    HDU 4609 3-idiots (FFT-快速傅立叶变换)
    HDU 4609 3-idiots (FFT-快速傅立叶变换)
    POJ 3084 Panic Room (最小割建模)
    POJ 3084 Panic Room (最小割建模)
    POJ 1966 Cable TV Network (无向图点连通度)
    POJ 1966 Cable TV Network (无向图点连通度)
  • 原文地址:https://www.cnblogs.com/jiehanshi/p/10779619.html
Copyright © 2011-2022 走看看