Java Thread 通信

版权声明:有关于交易的部分,如果有使用blog的策略,盈亏自负。https://blog.csdn.net/ydonghao2 https://blog.csdn.net/ydonghao2/article/details/80974237

单线程通信

  1. wait & notify
    wait()和notify()都是Object的方法。wait方法会使当前线程进入阻塞,知道有其它线程调用了notify()或notifyAll(),或者阻塞时间到了。
    wait(),notify必须拥有该对象的monitor(This monitor),也就是wait方法只能在同步方法中使用,并且wait和notify的对象一致。否则会抛出IllegalMonitorStateException。
    线程执行了某个对象的wait方法之后,会加入对应的wait set,每个对象的monitor都有一个与之对应的wait set。线程进入wait set之后,notify方法将其唤醒,也就是从wait set中弹出,同时中断wait中的线程也会将其唤醒。

多线程通信

  1. notifyAll
    和notify相似,都是它会唤醒所有阻塞的线程,然后唤醒的线程继续枪monitor的锁。
  2. 共享的数据结构,如ConcorrectHashMap,AtomInteger。
  3. 构造自己的lock。
public interface Lock {

    void lock();

    void lockInterruptibly() throws InterruptedException;

    boolean tryLock();

    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

    void unlock();

    Condition newCondition();
}

可以参考:http://ifeve.com/customizing-concurrency-classes-9/

猜你喜欢

转载自blog.csdn.net/ydonghao2/article/details/80974237