ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java线程池

2021-09-23 13:01:48  阅读:172  来源: 互联网

标签:状态 executorService java 线程 static 执行 等待


线程状态

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态

NEW

一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并
未启动。还没调用start方法。MyThread t = new MyThread()只有线程象,没有线程
特征。

RUNNABLE

当我们调用线程对象的start方法,那么此时线程对象进入了RUNNABLE状态。那么此
时才是真正的在JVM进程中创建了一个线程,线程一经启动并不是立即得到执行,线程
的运行与否要听令与CPU的调度,那么我们把这个中间状态称之为可执行状态
(RUNNABLE)也就是说它具备执行的资格,但是并没有真正的执行起来而是在等待CPU
的度。

BLOCKED

当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入
Blocked状态;当该线程持有锁时,该线程将变成Runnable状态。

WAITING

一个正在等待的线程的状态。也称之为等待状态。造成线程等待的原因有两种,分别
是调用Object.wait()、join()方法。处于等待状态的线程,正在等待其他线程去执行一
个特定的操作。例如:因为wait()而等待的线程正在等待另一个线程去调用notify()或
notifyAll();一个因为join()而等待的线程正在等待另一个线程结束。

TIMED_WAITING

一个在限定时间内等待的线程的状态。也称之为限时等待状态。造成线程限时等待状
态的原因有三种,分别是:Thread.sleep(long),Object.wait(long)、join(long)。

TERMINATED

一个完全运行完成的线程的状态。也称之为终止状态、结束状态

线程池

基本设计思路: 1、准备一个任务容器
2、一次性启动多个(2个)消费线程
3、刚开始任务容器是空的,所以线程都在wait
4、直到一个外部线程向这个任务容器中扔了一个“任务”,就会有一个消费者线程被唤醒
5、这个消费者线程取出“任务”,并且执行这个任务,执行完毕后,继续等待下一次任务的到来

线程池-Executors默认线程池

概述:JDK对线程池也进行了相关的实现,在真实企业开发中我们也很少去自定义线程池,而是使用JDK中自带的线程池。

我们可以使用Executors中所提供的静态方法来创建线程池

static ExecutorService newCachedThreadPool() 创建一个默认的线程池 static newFixedThreadPool(int
nThreads) 创建一个指定最多线程数量的线程池

示例代码

public class ThreadPool_01 {

    public static void main(String[] args) {

        ExecutorService executorService = Executors.newCachedThreadPool();

        executorService.submit(() -> {
            System.out.println(Thread.currentThread().getName() + "在执行");
        });

        executorService.submit(() -> {
            System.out.println(Thread.currentThread().getName() + "在执行");
        });

        executorService.shutdown();
    }
}

线程池-Executors创建指定上限的线程池

static ExecutorService newFixedThreadPool(int nThreads) : 创建一个指定最多线程数量的线程池

示例代码

public class ThreadPool_02 {

    public static void main(String[] args) {

        ExecutorService executorService = Executors.newFixedThreadPool(10);

        ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)executorService;
        System.out.println(threadPoolExecutor.getPoolSize());
    }
}

标签:状态,executorService,java,线程,static,执行,等待
来源: https://blog.csdn.net/chocomoss/article/details/120432574

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有