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

📄 condvar.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
 */
public class CondVar {
  private BusyFlag SyncVar;
  public CondVar() {
    this(new BusyFlag());
  }

  public CondVar(BusyFlag sv) {
    SyncVar = sv;
  }
  /**
   * 相当于wait()方法
   * ***/
  public void cvWait() throws InterruptedException {
    cvTimedWait(SyncVar, 0);
  }

  /**
   * 相当于wait()方法
   * ***/
  public void cvWait(BusyFlag sv) throws InterruptedException {
    cvTimedWait(sv, 0);
  }

  /**
   * 相当于wait()方法
   * ***/
  public void cvTimedWait(int millis) throws InterruptedException {
    cvTimedWait(SyncVar, millis);
  }

  /**
   * 相当于wait()方法
   * ***/
  public void cvTimedWait(BusyFlag sv, int millis) throws InterruptedException {
    int iThreadLockCount = 0;
    InterruptedException errx = null;
    synchronized (this) {

      //判断此方法必须拥有锁
      if (sv.getBusyFlagOwner() != Thread.currentThread()) {
        // throw new InterruptedException("");
      }

      //完全地释放锁
      while (sv.getBusyFlagOwner() == Thread.currentThread()) {
        iThreadLockCount++;
        sv.freeBusyFlag();
      }
      //使用wait()方法
      try {
        if (millis == 0) {
          wait();
        }
        else {
          wait(millis);
        }
      }
      catch (InterruptedException ex) {
        errx = ex;
      }

      //获取锁
      for (; iThreadLockCount > 0; iThreadLockCount--) {
        sv.getBusyFlag();
      }
      if (errx != null) {
        throw errx;
      }
    }
  }

  /**
   * 相当于notify()方法
   * ***/
  public void cvSignal() {
    cvSignal(SyncVar);
  }

  /**
   * 相当于notify()方法
   * ***/
  public synchronized void cvSignal(BusyFlag sv) {
    //判断此方法必须拥有锁
    if (sv.getBusyFlagOwner() != Thread.currentThread()) {
    }
    notify();
  }

  /**
   * 相当于notifyAll()方法
   * ***/
  public void cvBroadcast() {
    cvBroadcast(SyncVar);
  }


  /**
   * 相当于notifyAll()方法
   * ***/
  public synchronized void cvBroadcast(BusyFlag sv) {
    //判断此方法必须拥有锁
    if (sv.getBusyFlagOwner() != Thread.currentThread()) {
    }
    notifyAll();
  }

  public static void main(String[] args) {
    CondVar condvar = new CondVar();

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -