• Condition 显式条件


    显式条件在不同上下文中也可以被称为条件变量、条件队列、或条件

    锁用于解决竞态条件问题,条件是线程间的协作机制。显式锁与synchronized相对应,而显式条件与wait/notify相对应。wait/notify与synchronized配合使用,显式条件与显式锁配合使用。条件与锁相关联,创建条件变量需要通过显式锁,Lock接口定义了创建方法:

    Condition newCondition();
    

    Condition表示条件变量,是一个接口,它的定义为:

    public interface Condition {
      void await() throws InterruptedException;
      void awaitUninterruptibly();
      long awaitNanos(long nanosTimeout) throws InterruptedException;
      boolean await(long time, TimeUnit unit) throws InterruptedException;
      boolean awaitUntil(Date deadline) throws InterruptedException;
      void signal();
      void signalAll();
    }
    

    await对应于Object的wait, signal对应于notify, signalAll对应于notifyAll,语义也是一样的。

    使用显式条件进行协作的示例:

    public class WaitThread extends Thread {
        private volatile boolean fire = false;
        private Lock lock = new ReentrantLock();
        private Condition condition = lock.newCondition();
        @Override
        public void run() {
            try {
                lock.lock();
                try {
                    while (!fire) {
                        condition.await();
                    }
                } finally {
                    lock.unlock();
                }
                System.out.println("fired");
            } catch (InterruptedException e) {
                Thread.interrupted();
            }
        }
        public void fire() {
            lock.lock();
            try {
                this.fire = true;
                condition.signal();
            } finally {
                lock.unlock();
            }
        }
        public static void main(String[] args) throws InterruptedException {
            WaitThread waitThread = new WaitThread();
            waitThread.start();
            Thread.sleep(1000);
            System.out.println("fire");
            waitThread.fire();
        }
    }
    

      

    参考: Java编程的逻辑 16.3 显式条件

  • 相关阅读:
    赴美工作常识(Part 4
    赴美工作常识(Part 3
    50 年前的黑客黑什么?
    孩子王?有孩子气才能为王?
    赴美工作常识(Part 2
    UE4 Keynote 1
    Go Programming Language 3
    Go Programming Language 2
    Go Programming Language
    Lua语法要点2
  • 原文地址:https://www.cnblogs.com/ooo0/p/15843708.html
Copyright © 2020-2023  润新知