📄 busyflag.java
字号:
package thread.lock;
/**
* <p>Title: </p>
*
* <p>Description: 自定义锁</p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: netsky</p>
*
* @author wdz123@hotmail.com
* @version 1.0
* @see <<Java线程>> O'reilly 中国电力出版社 ISBN 7-5083-1318-6 2003年出版
*/
public class BusyFlag {
protected Thread busyflag = null;
protected int busycount = 0;
public BusyFlag() {
}
/**
* 获得持有锁的线程
* **/
public synchronized Thread getBusyFlagOwner(){
return busyflag;
}
/**
* 获取锁
* **/
public synchronized void getBusyFlag(){
//获取锁,失败,就进入等待状态,成功就返回
while(tryGetBusyFlag()==false){
try {
wait();
}
catch (Exception ex) {
}
}
}
/***
* 尝试获取锁,可能成功,也可能失败
* 获取成功,计数器加1
* **/
public synchronized boolean tryGetBusyFlag(){
boolean flag ;
//没有线程持有锁
if (busyflag==null){
//给线程加锁
busyflag = Thread.currentThread();
busycount = 1;
flag = true;
}
//当前线程已经持有该锁,计数器加1
else if(busyflag==Thread.currentThread()){
busycount ++;
flag = true;
}
//别的线程持有该锁,获取锁失败
else{
flag=false;
}
return flag;
}
/***
* 释放锁
* **/
public void freeBusyFlag(){
if (getBusyFlagOwner()==Thread.currentThread()){
busycount --;
if(busycount<=0){
busyflag =null;
notify();//notifyAll();//通知在等待获取该锁的线程
}
}
}
public static void main(String[] args) {
BusyFlag busyflag = new BusyFlag();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -