⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 busyflag.java

📁 介绍线程的使用方法
💻 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 + -