Java Thread 通信

单线程通信

  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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值