notifyone和notifyall区别_notify被动形式

notifyone和notifyall区别_notify被动形式Notify与notifyall的区别notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。 notify则文明得多他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁此时如果该对象没有再次使用notify语句…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Notify与notifyall的区别
notifyAll
使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成
等待该对象上的锁
,一旦该对象被解锁,他们就会去竞争。
 notify
则文明得多他只是
选择一个wait状态线程进行通知,并使它获得该对象上的锁
,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁此时如果该对象没有再次使用notify语句,则即便该对象已经空闲其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。
1.两个方法都是Object对象用于通知处在等待该对象的线程的方法。
2.notify唤醒一个等待的线程;notifyAll唤醒所有等待的线程。
3.扩展在后面:
锁池:某个线程中调用了对象锁的
notify()方法
之后,争夺执行权,进入锁池。
等待池:某个线程中调用了对象锁的
wait()方法
之后,该线程主动放弃执行权并等待唤醒,进入待待池。
演示代码:(借鉴一篇博客中看到的代码)
package com.Map.test;

import java.util.concurrent.TimeUnit;

public class notifyOrNotifyAll {
public static void main(String[] args) {
Object co = new Object();
for (int i = 0; i < 5; i++) {
//用循环启动五个线程0-4
MyThread t = new MyThread(“Thread
” + i,co);
t.start();
}
try {
TimeUnit.SECONDS.sleep(2);
System.out.println(“—–Main Thread notify—–
“);
synchronized(co){

co.notify();
//唤醒一个等待的线程
}
notifyone和notifyall区别_notify被动形式
TimeUnit.SECONDS.sleep(2);
System.out.println(“Main Thread is end
.”);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

static class MyThread extends Thread {
private String name;
private Object co;

public MyThread(String name, Object o) {
this.name = name;
this.co = o;
}

@Override
public void run() {
System.out.println(name + ” is waiting
.”);
try {
synchronized (co) {
co.wait();
}
System.out.println(name + “ has been notified
.”);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
将其中的那个notify换成
notifyAll
运行结果
notifyone和notifyall区别_notify被动形式

扩展:
等待池
:
假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁(因为wait()方法必须出现在synchronized中,这样自然在执行wait()方法之前线程A就已经拥有了该对象的锁),同时线程A就进入到了该对象的等待池中
锁池

如果另外的一个线程调用了相同对象的notifyAll()方法,那么处于该对象的等待池中的线程就会全部进入该对象的锁池中,准备争夺锁的拥有权。如果另外的一个线程调用了相同对象的notify()方法,那么仅仅有一个处于该对象的等待池中的线程(随机)会进入该对象的锁池。
sleep()和wait()方法与对象锁、锁池、等待池
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196194.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • web版聊天功能简单实现

    web版聊天功能简单实现一、问题核心点:如何找到要发送的人?要完成一个功能我觉得首先要分析该功能的逻辑及技术难点,而不是盲目的直接就撸代码,这样非常浪费时间。个人觉得web版聊天功能没什么实际应用场景,以前看过中国移动好

    2022年7月2日
    26
  • 有java安装包怎么安装(java安装包打不开)

    JavaJDK安装包获取和安装:JDK1.8.211官网下载地址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html注意:1.不要安装到C盘2.安装路径中不要出现任何的中文环境变量配置:Windows+E–>页面空白处鼠标右键–>属性系统页面…

    2022年4月17日
    39
  • 硬件工程师成长之路(9)——检测标准

    硬件工程师成长之路(9)——检测标准系列文章目录1.元件基础2.电路设计3.PCB设计4.元件焊接6.程序设计文章目录前言一、防爆认证前言送给大学毕业后找不到奋斗方向的你(每周不定时更新)嵌入式系统设计师考试一、防爆认证详细资料………………

    2025年9月17日
    7
  • 阿里云ssl证书过期_阿里云acp证书含金量

    阿里云ssl证书过期_阿里云acp证书含金量阿里云提示内容如下:【阿里云】尊敬的:您域名com使用的SSL证书cert-还有1天过期,过期时间2021-04-21。为防止业务受影响,请提前5个工作日续费并更新证书。请尽快登陆控制台处。这是阿里云的SSL证书产品的到期通知,SSL证书主要用于HTTPS加密协议场景包括,电子商务、微信小程序、微信公众号、APP、公司网站等。SSL证书到期后会让对应的项目立即暂停服务,比如微信小程序就会立即停止服务,用户不能正常使用小程序,其它的场景也一样,所以SSL证书到期之前必须要尽快办理续费!SSL证

    2022年9月27日
    3
  • osip和mysql_osip2/eXosip2调试笔记

    osip和mysql_osip2/eXosip2调试笔记软件版本:libosip2-3.3.0.tar.gzlibeXosip2-3.3.0.tar.gz./configure–prefix=/opt/sip/target–disable-staticmakemakeinstall测试代码:代码来源:http://blog.csdn.net/bat603/archive/2006/11/15/1386277.aspx1、UAS…

    2022年6月24日
    26
  • 互联网公司职位简介

    互联网公司职位简介互联网公司职位简介

    2022年4月23日
    91

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号