随笔记录-java并发编程

来源:互联网 发布:淘宝交易关闭怎么恢复 编辑:程序博客网 时间:2024/06/06 04:05

1、多线程中减少上下文切换方式:

尽量少用空闲线程,避免创建线程CAS结构编写无锁编程携程

2、锁的四种状态(从低到高),状态会随着竞争情况逐渐升级。锁可以升级不能降级

无锁状态偏向锁状态轻量级锁状态重量级锁状态

volatile 特性:

1、可见性,对于图个volatile变量的读,总能看到对这个变量最后的写入;
2、原子性,对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。
所以volatile 最好使用 赋值,减少使用复合操作,即只使用 volatile a = *;get set方法式原子操作

final 特性:

在对象引用为任意线程可见之前,对象的final域已经被正确初始化;
在读一个对象的final域之前,一定会先读包含这个final域的对象的引用,所以final对象肯定需要被初始化;

java许多API会声明抛出InterruptedException方法(比如 Thread.sleep),在抛出InterruptedException之前,java虚拟机会先将该线程中断标识清除,然后抛出;

wait notify notifyAll 细节

1.使用三个操作时都需要加锁
2.调用wait后,线程状态由running变为waiting,并且马上释放锁,不需要将线程执行完成;
3.notify notifyAll调用后,等待线程依旧不会从wait返回,需要调用notify notifyAll的线程释放锁以后等待线程才会返回;

java 同步器:
即锁的基本实现方式

首先获取同步状态(对于开发者来说是获取锁),如果获取锁失败,就生成一个节点,然后加入到一个同步节点队列中(该队列都是获取同步状态失败的操作,队列为FIFO,都通过自旋(死循环)判断是否正确添加到队尾中)。通过自旋一直判断自己前驱节点是否为头节点,如果前面节点是头节点,获取同步状态 如果获取失败,等待,等待头节点执行完成以后会唤醒下一个节点,进行执行。

0 0
原创粉丝点击