摘要: Java 并发工具包中 java.util.concurrent.ExecutorService 接口定义了线程池任务提交、获取线程池状态、线程池停止的方法等。 JDK 1.8 中,线程池的停止一般使用 shutdown()、shutdownNow()、shutdown() + awaitTermi 阅读全文
posted @ 2019-10-16 16:28 ConstXiong 阅读(3548) 评论(0) 推荐(1) 编辑
摘要: 线程池状态: 线程池的5种状态:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED。 见 ThreadPoolExecutor 源码 // runState is stored in the high-order bits private static final in 阅读全文
posted @ 2019-10-16 16:23 ConstXiong 阅读(8279) 评论(0) 推荐(3) 编辑
摘要: 什么是线程池? 线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待下一个任务。 为什么要使用线程池? 因为 Java 中创建一个线程,需要调用操作系统内核的 API,操作系统要为线程分配一系列的资源, 阅读全文
posted @ 2019-10-16 16:19 ConstXiong 阅读(5027) 评论(0) 推荐(0) 编辑
摘要: 线程的生命周期 线程包括哪些状态的问题说专业一点就是线程的生命周期。 不同的编程语言对线程的生命周期封装是不同的。 Java 中线程的生命周期 Java 语言中线程共有六种状态。 NEW(初始化状态) RUNNABLE(可运行 / 运行状态) BLOCKED(阻塞状态) WAITING(无限时等待) 阅读全文
posted @ 2019-10-16 16:15 ConstXiong 阅读(2147) 评论(0) 推荐(1) 编辑
摘要: Java线程分为用户线程和守护线程。 守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。 Java中把线程设置为守护线程的方法:在 start 线程之前调用线程的 setDaemon(true) 方法。 注意: setDaemon(true) 阅读全文
posted @ 2019-10-16 16:12 ConstXiong 阅读(734) 评论(0) 推荐(0) 编辑
摘要: 线程终止有两种情况: 1、线程的任务执行完成 2、线程在执行任务过程中发生异常 这两者属于线程自行终止,如何让线程 A 把线程 B 终止呢? Java 中 Thread 类有一个 stop() 方法,可以终止线程,不过这个方法会让线程直接终止,在执行的任务立即终止,未执行的任务无法反馈,所以 sto 阅读全文
posted @ 2019-10-16 12:00 ConstXiong 阅读(2938) 评论(1) 推荐(0) 编辑
摘要: Java 中有 4 种常见的创建线程的方式。 一、重写 Thread 类的 run() 方法。 表现形式有两种:1)new Thread 对象匿名重写 run() 方法 package constxiong.concurrency.a006; /** * new Thread 对象匿名重写 run( 阅读全文
posted @ 2019-10-15 20:47 ConstXiong 阅读(734) 评论(0) 推荐(0) 编辑
摘要: 进程: 程序执行时的一个实例 每个进程都有独立的内存地址空间 系统进行资源分配和调度的基本单位 进程里的堆,是一个进程中最大的一块内存,被进程中的所有线程共享的,进程创建时分配,主要存放 new 创建的对象实例 进程里的方法区,是用来存放进程中的代码片段的,是线程共享的 在多线程 OS 中,进程不是 阅读全文
posted @ 2019-10-15 20:40 ConstXiong 阅读(7411) 评论(0) 推荐(2) 编辑
摘要: 并行:指两个或两个以上事件或活动在同一时刻发生。如多个任务在多个 CPU 或 CPU 的多个核上同时执行,不存在 CPU 资源的竞争、等待行为。 并行与并发的区别 1、并行指多个事件在同一个时刻发生;并发指在某时刻只有一个事件在发生,某个时间段内由于 CPU 交替执行,可以发生多个事件。 2、并行没 阅读全文
posted @ 2019-10-15 20:33 ConstXiong 阅读(3843) 评论(0) 推荐(0) 编辑
摘要: 1、Java 中的线程对应是操作系统级别的线程,线程数量控制不好,频繁的创建、销毁线程和线程间的切换,比较消耗内存和时间。 2、容易带来线程安全问题。如线程的可见性、有序性、原子性问题,会导致程序出现的结果与预期结果不一致。 3、多线程容易造成死锁、活锁、线程饥饿等问题。此类问题往往只能通过手动停止 阅读全文
posted @ 2019-10-15 20:28 ConstXiong 阅读(482) 评论(0) 推荐(0) 编辑