????? Java????????????
???????????? ???????[ 2013/12/23 11:01:31 ] ????????
1??????????ReentrantLock??????synchronized?飬???????????????????
(1) ??????
???????????????
Lock lock = new ReentrantLock();
????????????????????????????У?????????
void lock();
?????
void unlock();
????????lock()
boolean tryLock();
(2) ????????
locker.lock();
try{
//code here to access the cirtical section
}finally{
locker.unlock();
}
???????????????κ????????????????????????????????????????????????????κ?????????lock?????????????????????????????????????????try???????????????????finally block??????locker??
(3) ???????????
???????????????????????????????????е????????????????????м???(hold count)??????lock???????????á????????ε???lock???????unlock???????????????????????????????????????????????????????????????
(4) ???????
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class WorkerOne extends Thread{
private Lock locker;
public WorkerOne (Lock locker){
this.locker = locker;
}
public void run(){
locker.lock();
try{
System.out.println(Thread.currentThread().getName()+":step into critical section");
}finally{
locker.unlock();
}
}
}
class WorkerTwo extends Thread{
private Lock locker;
public WorkerTwo (Lock locker){
this.locker = locker;
}
public void sayHello(){
locker.lock();
try{ System.out.println(Thread.currentThread().getName()+":call sayHello()");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
locker.unlock();
}
}
public void run(){
locker.lock();
try{ System.out.println(Thread.currentThread().getName()+":setp into critical section");
//???????????????
sayHello();
}finally{
locker.unlock();
}
}
}
public class Test5 {
public static void main(String[] args) {
Lock locker = new ReentrantLock();
WorkerOne wo= new WorkerOne(locker);
wo.setName("WorkerOne");
WorkerTwo wt = new WorkerTwo(locker);
wt.setName("WorkerTwo");
wt.start();
wo.start();
}
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11