一、内建锁 (synchronized)
- 同步代码块:
使用synchronized作用于方法中,同一时刻只能有一个线程进入该代码块,方法内任是多线程;
synchronized(this){
//需要同步的代码块
} - 同步方法:
使用synchronized作用于方法头,同一时刻只能有一个线程进入该方法;
public synchronized void Method(){ } - 关于synchronized的说明:
实际上,synchronized(this)非static的synchronized方法,只能防止多个线程同时执行同一个对象的同步代码块;
synchronized 叫对象锁,锁的就是对象本身,即(this)。 - 对象锁与全局锁
synchronized默认为对象锁,锁的是当前对象而不是代码段;
全局锁:锁的是真正的代码段,与对象无关。
在同步代码段锁class对象:synchronized (myThread.Class)
使用static synchronized 方法: public static synchronized void Method(){ }
当方法中有两个同步方法时,一个线程进入某一同步方法时,另一个线程无法进入。
二、Lock 锁
三、死锁 (解决:破坏环)
本质:共享资源的循环等待;
对共享资源上锁,注意不要成环;
四、生产与消费者模型:
生产-消费者之间不直接通信,借助阻塞队列来通信。
具体代码,之后更新。