首页 > 其他分享 >线程池 种类

线程池 种类

时间:2024-08-15 15:18:26浏览次数:11  
标签:... 15 thread 线程 种类 new public pool

fixed single cached

import java.util.concurrent.*;

public class T {

    public static void main(String[] args) {
        ExecutorService threadPool = getFixedThreadPool();
        for (int i = 0; i < 8; i++) {
            threadPool.submit(new MyTask(i));
        }
    }

    /*
     new ThreadPoolExecutor(nThreads, nThreads,
                            0L, TimeUnit.MILLISECONDS,
                            new LinkedBlockingQueue<Runnable>())
    适用任务量已知,相对耗时的任务
    pool-1-thread-【1】...0
    pool-1-thread-【3】...2
    pool-1-thread-【2】...1
    pool-1-thread-【2】...3
    pool-1-thread-【3】...4
    pool-1-thread-【1】...5
    pool-1-thread-【1】...7
    pool-1-thread-【3】...6
    * */
    public static ExecutorService getFixedThreadPool() {
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        return threadPool;
    }


    /*
    new ThreadPoolExecutor(1, 1,
                           0L, TimeUnit.MILLISECONDS,
                           new LinkedBlockingQueue<Runnable>())
    来一个任务执行一个任务
    适用于按照顺序执行的任务

    pool-1-thread-【1】...(0)
    pool-1-thread-【1】...(1)
    pool-1-thread-【1】...(2)
    pool-1-thread-【1】...(3)
    pool-1-thread-【1】...(4)
    pool-1-thread-【1】...(5)
    pool-1-thread-【1】...(6)
    pool-1-thread-【1】...(7)
    * */
    public static ExecutorService getSingleThreadPool() {
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        return threadPool;
    }

    /*
    new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                           60L, TimeUnit.SECONDS,
                           new SynchronousQueue<Runnable>());
    创建大量的线程
    适用:任务数比较密集,每个任务执行比较短的情况

    pool-1-thread-【1】...0
    pool-1-thread-【6】...5
    pool-1-thread-【7】...6
    pool-1-thread-【5】...4
    pool-1-thread-【4】...3
    pool-1-thread-【3】...2
    pool-1-thread-【2】...1
    pool-1-thread-【8】...7
    * */
    public static ExecutorService getCachedThreadPool() {
        ExecutorService threadPool = Executors.newCachedThreadPool();
        return threadPool;
    }
}

class MyTask implements Runnable {
    private int i;

    public MyTask(int i) {
        this.i = i;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "..." + i);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

delayed

import lombok.SneakyThrows;

import java.util.Date;
import java.util.concurrent.*;

/*
main发起线程池提交时间Thu Aug 15 15:12:20 CST 2024
pool-1-thread-2 开始时间Thu Aug 15 15:12:20 CST 2024和发起线程池提交时间差=0s
pool-1-thread-2 结束时间Thu Aug 15 15:12:21 CST 2024
pool-1-thread-1 开始时间Thu Aug 15 15:12:22 CST 2024和发起线程池提交时间差=2s
pool-1-thread-1 结束时间Thu Aug 15 15:12:23 CST 2024
pool-1-thread-2 开始时间Thu Aug 15 15:12:25 CST 2024和发起线程池提交时间差=5s
pool-1-thread-2 结束时间Thu Aug 15 15:12:26 CST 2024
* */
public class T {

    @SneakyThrows
    public static void main(String[] args) {
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);

        Date submitDate = new Date();
        System.out.println(Thread.currentThread().getName() + "发起线程池提交时间" + submitDate);
        scheduledThreadPool.schedule(new MyTask(submitDate), 0, TimeUnit.SECONDS);
        scheduledThreadPool.schedule(new MyTask(submitDate), 2, TimeUnit.SECONDS);
        scheduledThreadPool.schedule(new MyTask(submitDate), 5, TimeUnit.SECONDS);

        Thread.sleep(8000);
        scheduledThreadPool.shutdownNow();

    }

}

class MyTask implements Runnable {

    private Date date;

    public MyTask(Date date) {
        this.date = date;
    }

    @Override
    public void run() {
        try {
            Date dateTemp = new Date();
            System.out.println(Thread.currentThread().getName() +
                    " 开始时间" + dateTemp
                    + "和发起线程池提交时间差=" + (dateTemp.getTime() - this.date.getTime()) / 1000 + "s");
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName() + " 结束时间" + new Date());
        } catch (Exception e) {

        }
    }
}

标签:...,15,thread,线程,种类,new,public,pool
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18360977

相关文章

  • 【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表
    ArrayList(JDK8)ArrayList有四个内部类,成员内部类Itr,成员内部类ListItr,静态内部类SubList,ArrayListSpliterator(暂时用不到)Itr是Iterator的实现类,支持正向遍历,ArrayList的iterator方法返回一个Itr对象ListItr是ListIterator的实现类,支持双向遍历,ArrayList的listIterator方法......
  • 线程池创建的几种方式
    线程池的创建⽅法总共有7种,但总体来说可分为2类:通过ThreadPoolExecutor创建的线程池;通过Executors创建的线程池前置步骤publicclassThreadTaskimplementsRunnable{Loggerlogger=LoggerFactory.getLogger(ThreadDemo.class);privateStringtaskN......
  • Java 中的线程本地存储(ThreadLocal)机制介绍
    Java中的ThreadLocal是一个用于实现线程本地存储(ThreadLocalStorage,TLS)的机制。它可以为每个线程提供独立的变量副本,使得一个线程中的变量不受其他线程中的变量的影响。ThreadLocal通常用于在多线程环境下避免线程之间共享数据,从而实现线程安全。一、基本用法ThreadLoca......
  • 轻松解析高频面试题: 线程设置数量多少合适?带你面试乱杀
    目录一、前言二、线程数和CPU利用率的小测试三、插入io操作四、线程数和CPU利用率总结五、线程数规划的公式 六、真实程序中的线程数一、前言相信很多小伙伴在刷面试题的时候都看到过一个线程数设置的理论:CPU密集型的程序-核心数+1I/O密集型的程序-核心数......
  • 进程线程(3)
    线程的概念        线程是存在于进程空间中的,使用进程的资源。创建和调度时空开销都比进程小。进程是资源分配的基本单位。重量级进程。进程空间独立,不能直接通信。线程是系统调度的最小单位。轻量级进程。一般是一个进程中的多个任务。线程可以共享空间,可以直接通信......
  • 探索Delphi的多线程世界:线程与进程的奥秘
    探索Delphi的多线程世界:线程与进程的奥秘在现代软件开发中,多线程和多进程是提高应用性能和响应能力的关键技术。Delphi,作为历史悠久的编程语言,提供了丰富的多线程支持。本文将深入探讨Delphi中的线程与进程的区别,并提供实际代码示例,帮助读者理解这两种并发执行方式的内在机......
  • QT多线程
    当处理复杂的数据时,此时耗时间,需要多任务处理就需要用到线程了qt中使用线程的方法,自定义一个类继承QThreadQThread类中有个虚函数 voidrun()才是线程中的处理函数我们需要重写该函数但启动线程不能直接调用run函数,需要通过线程类的start()函数来间接调用run函数......
  • 终止线程 中断标志 vs Interrupt() vs stop()
    退出标志importlombok.SneakyThrows;importjava.text.SimpleDateFormat;publicclassT{staticbooleanflag=true;@SneakyThrowspublicstaticvoidmain(String[]args){Threadthread1=newThread(()->{try{......
  • CUDA函数的概念、种类和示例
    在CUDA编程中的函数:A,总述1,CUDA内置函数CUDA内置函数是由NVIDIA提供的,用于支持CUDA编程模型的一系列预定义函数。这些函数包括内存管理(如cudaMalloc、cudaFree)、数据复制(如cudaMemcpy)、同步操作(如cudaDeviceSynchronize)、数学运算(如sin、cos等数学函数在设备代码中的版本,如__sin......
  • 线程执行顺序 join()
    importlombok.SneakyThrows;importjava.util.concurrent.TimeUnit;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){Objecto=newObject();Threadthread1=newThread(()->{try{......