可重入锁:指的是在同一个线程中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁,它基于线程的粒度,per-thread
不可重入锁:指的是每次使用锁方法时,都需要获取新的锁,即使在同一个线程中调用同一个方法都需要等待上一个锁的释放,它是基于method粒度,per-invocation
可中断锁:在等待获取锁过程中可中断,注意是在等待锁过程中才可以中断,如果已经获取了锁,中断就无效。
公平锁:按等待获取锁的线程的等待时间进行获取,等待时间长的具有优先获取锁权利,即按先后顺序来持有锁。
读写锁:对资源读取和写入的时候拆分为两部分处理,读的时候可以多线程一起读,写的时候必须同步写,如:ReentrantReadWriteLock
可重入锁实现:
package com.xql.thread.lock;
public class ReentrantTest implements Runnable {
public synchronized void get() {
System.out.println(Thread.currentThread().getName());
set();
}
public synchronized void set() {
System.out.println(Thread.currentThread().getName());
}
@Override
public void run() {
get();
}
}
package com.xql.thread.lock;
public class LockTest {
public static void main(String[] args) {
ReentrantTest rt = new ReentrantTest();
for (;;){
new Thread(rt).start();
}
}
}