作为一本Java多线程开发圣经级别的书,第一遍读完整理一下本书知识的目录结构,以便后续回顾和知识点自查;
上下文切换
CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务,但是在切换前会保存切换前任务的状态,以便下次切换回这个任务时,可以加载这个任务状态,所以任务从保存到再加载的过程就是一个上下文切换。
减少上下文切换
- 无锁并发编程
- CAS算法
- 使用最少线程
- 使用协程—即在单线程中实现多任务调度。
死锁代码示例
/**
* @author zhengzheng046
*/
public class DeadLockDemo {
private static String A = "A";
private static String B = "B";
public static void main(String[] args) {
new DeadLockDemo().deadLock();
}
private void deadLock() {
Thread t1 = new Thread(() -> {
synchronized (A) {
try {
System.out.println("当前线程名:" + Thread.currentThread().getName());
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B) {
System.out.println("1");
}
}
});
Thread t2 =new Thread(()->{
synchronized (B){
System.out.println("当前线程名:"+Thread.currentThread().getName());
synchronized (A){
System.out.println("2");
}
}
});
t1.start();
t2.start();
}
}