终止线程的方式

1. 正常退出 程序运行结束,线程自动结束。 2. 退出标志 一般 run() 方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。使用一个变量来控制循环,例如:最直接的方法就是设一个 boolean 类型的标志,并通过

线程的生命周期

参考文献: 深入理解Java并发框架AQS系列(一):线程 1. 概述 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过 6 种状态: NEW-初始 RUNNABLE-可运行 BLOCKED-阻塞 WAITING-等待 TIMED_WAIT

LockSupport

1. 方法概述 LokSupport 包含以下方法 void park(); void park(Object blocker); void parkNanos(long nanos); void parkNanos(Object blocker, long nanos); void parkUnt

CAS

1. 概念及特性 CAS(Compare And Swap/Set)比较并交换,CAS 算法的过程是这样:它包含 3 个参数 CAS(V,E,N)。 V 表示要更新的变量(内存值),E 表示预期值(旧的),N 表示新值。 当且仅当 V 值等于 E 值时,才会将 V 的值设为 N,如果 V 值和 E

 

线程的基本方法

1. 线程等待 wait 调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用 wait()方法后,会释放对象的锁。因此,wait 方法一般用在同步方法或同步代码块中。 2. 线程睡眠 sleep sleep 导致当前线程休眠,与 wait 方法不同的

join 方法的使用

主线程创建并启动子线程,如果自线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到 join() 方法 先来看一个不用 join() 方法的例子 public class MyThrea

线程池

1. 四种常用线程池 1.1 newCachedThreadPool 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创

阻塞队列

1. 原理 阻塞队列,关键字是阻塞,先理解阻塞的含义,在阻塞队列中,线程阻塞有这样的两种情况: 当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。 当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。 2.

集合 

Future 和 Callable

Future 可以将 Future 视为保存结果的对象-但它可能暂时没有结果,它代表未来异步计算的结果。 提供了以下方法 // 试图取消此任务的执行。如果任务已完成、已取消或由于其他原因无法取消,则此尝试将失败。 // 如果成功,并且调用 cancel 时此任务尚未启动,则此任务不应运行。 // 如

守护线程

1. 什么是守护线程 在 Java 中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。 守护线程也称“服务线程”,守护线程会在没有用户线程可服务时自动离开。 守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。 Daemon 的作用是为其他线程的运