java多线程-ReentranLock
一、ReentranLock
ReentranLock公平锁和非公平锁的创建
//创建公平锁
Lock fairLock = new ReentranLock(true);
//创建非公平锁
Lock fairLock = new ReentranLock();
Lock fairLock = new ReentranLock(false);
ReentranLock公平锁和非公平锁之间的区别
ReentranLock使用方式
Class X{
//定义一个锁
private final Lock lock = new ReentranLock();
public void method(){
try{
lock.lock();//获得锁
/*此处是临界资源*/
}finally{
lock.unlock();//释放锁
}
}
}
二、 多个线程访问同一个对象的同一个ReentranLock锁定的方法中的
package java_lang_Object;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* Created by luckyboy on 2018/7/7.
*/
public class ReentrantLockTest {
public static void main(String[] args){
ThreadDomain3 threadDomain3 = new ThreadDomain3();
MyThread7_9 thread1 = new MyThread7_9(threadDomain3);
MyThread7_9 thread2 = new MyThread7_9(threadDomain3);
MyThread7_9 thread3 = new MyThread7_9(threadDomain3);
thread1.start();
thread2.start();
thread3.start();
}
}
class ThreadDomain3{
private Lock lock = new ReentrantLock();
public void methodA(){
try{
lock.lock();
System.out.println(Thread.currentThread().getName()+"进入methodA");
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName()+"sleep 2s 后退出methodA");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
class MyThread7_9 extends Thread{
private ThreadDomain3 threadDomain3;
public MyThread7_9(