美文网首页
Java Thread:(4) notify() and not

Java Thread:(4) notify() and not

作者: 戈壁堂 | 来源:发表于2021-05-03 20:20 被阅读0次

假设有多个线程都处于wait()状态。

notify()是无法知道应该通知哪一个线程。所以可以调用notifyAll(),所有的等待线程都会收到通知。

但并不是所有的等待线程都并行执行。因为从wait()状态返回后,还是要重新获取到对象锁才能继续执行,然后每个线程可以根据自己的情况判断:是继续执行;还是需要再次进入等待状态。

这样有个好处是:

  • 系统释放的资源可能无法满足某一个wait的线程;但可能满足另外一个wait的线程
  • 甚至:释放的总资源,可能满足多个wait的线程(这需要程序员设计机制来进行资源分配,例如优先让需要资源较小的线程收到通知后继续执行)

如果需要“精确”控制哪一个线程接收到通知,可以设计一个类似如下的类——

public class TargetNotify {
    private Object Targets[] = null;
    public TargetNotify (int numberOfTargets) {
        Targets = new Object[numberOfTargets];
        for (int i = 0; i < numberOfTargets; i++) {
            Targets[i] = new Object();
        }
    }
    public void wait (int targetNumber) {
        synchronized (Targets[targetNumber]) {
            try {
                Targets[targetNumber].wait();
            } catch (Exception e) {}
        }
    }
    public void notify (int targetNumber) {
        synchronized (Targets[targetNumber]) {
            Targets[targetNumber].notify();
        }
    }
}

相关文章

  • Java Thread:(4) notify() and not

    假设有多个线程都处于wait()状态。 notify()是无法知道应该通知哪一个线程。所以可以调用notifyAl...

  • Java Thread:(3) wait() and notif

    Java Thread:(2) wait() and notify() 版本中需要注意的是getBusyFlag(...

  • wait/notify

    JAVA线程同步中wait()和notify()简洁例子 java中的wait(),notify(),notify...

  • why java

    为什么wait()和notify()方法是在Object类中,不在Thread类中wait()和notify() ...

  • java Thread的wait,notify,wait,sle

    将做工程过程比较重要的一些代码片段做个备份,如下的资料是关于java Thread的wait,notify,wai...

  • java初级认证错题

    notify和wait是属于Object类的 Thread理解Thread深入理解(http://www.open...

  • java基础——synchronize

    java基础-并发synchronize 一、wait\notify\notify all\synchronize...

  • java线程间通信(wait、notfiy)

    Thread1中使用wait语句,等待Thread2执行完notify之后,并将synchronized语句块执行...

  • 线程通信

    1 wait和notify 首先需要注意的是wait和notify都不在thread里,而是在Object里为什么...

  • Java多线程 - API

    Java中创建线程有4种方式:实现Runnable接口、继承Thread(Thread本身也是Runnable接口...

网友评论

      本文标题:Java Thread:(4) notify() and not

      本文链接:https://www.haomeiwen.com/subject/rybfdltx.html