java 锁

1. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操

 

ReentrantReadWriteLock

参考文档:ReadWriteLock场景应用解析 1. 介绍 为了提高性能,Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。 读写锁分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由 jvm 自己控制

 

终止线程的方式

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.

集合