java notify 唤醒_java notify()的唤醒
在线程等待的间隙,其他的线程会进行唤醒的操作,这时候我们要用的notify()方法来进行处理。当notify()结束线程的唤醒工作,才会进行下一步的wait方法,也就是说notify()也可以结合wait对线程一起作用。下面我们就notify()的概念、语法、参数、返回值、使用注意,以及结合wait使用的实例带来介绍。
1.概念
随机唤醒一个在一样的对象监视器上等待的线程。通知一个在对象上等待的线程,也就是对象wait set中的线程,使其从wait()方法返回,而返回的前提是该线程获取到了对象的锁。
2.语法public final void notify()
3.参数
无
4.返回值
没有返回值
5.使用注意
notify()也必须在同步方法或同步代码块中调用,用来唤醒等待该对象的其他线程。如果有多个线程在等待,随机挑选一个线程唤醒(唤醒哪个线程由JDK版本决定)。notify方法调用后,当前线程不会立刻释放对象锁,要等到当前线程执行完毕后再释放锁。
6.实例注:wait()和notify()应当用在synchronized内
package com.test;
import java.util.ArrayList;
public class ThreadWaitTeste {
public static void main(String[] args) {
ArrayList ar = new ArrayList();
Product p = new Product(ar);
Consumer c = new Consumer(ar);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
class Product implements Runnable{
ArrayList array;
public Product(ArrayList array){
this.array= array;
}
public void run() {
while (true){
synchronized(array){
if(this.array.size()<5){
this.array.add("test!");
this.array.add("test!");
this.array.add("test!");
this.array.add("test!");
System.out.println("Product size : "+array.size());
}else{
System.out.println("Product wait size : "+array.size()+"数量少于5,等待......");
try {
array.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
class Consumer implements Runnable{
ArrayList array;
public Consumer(ArrayList array){
this.array= array;
}
public void run() {
while(true){
synchronized(array){
if(this.array.size()>=5){
this.array.remove(1);
System.out.println("Consumer size : "+array.size());
}else{
try {
array.notifyAll();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
以上就是java中notify()的唤醒方法,同时结合了wait的使用,完成了线程的等待和唤醒过程。看完基本的notify()知识点后,就可以进行实战的操作了。
java notify 唤醒_java notify()的唤醒相关推荐
- java 等待 唤醒_Java之等待唤醒机制的代码实现
各位小伙伴们大家好,在之前的文章中,小编陆陆续续讲了很多关于线程还有等待唤醒机制的一些知识,这次小编要讲的是等待唤醒机制的代码实现. 就用快递员送快递,我们取快递来举例,首先要进行需求分析.主要有两个 ...
- java notify 用法_Java notify的使用
半路出家学习java, 花了几分钟简单看了.在早上那个例子上稍微改了下, notify 对象上必须使用 synchronized 我的理解是在java synchronized只是个线程同步标志,但是 ...
- java sleep唤醒_JAVA wait(), notify(),sleep详解(转)
在JAVA中,是没有类似于PV操作.进程互斥等相干的方法的.JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的 ...
- java线程唤醒线程_Java中如何唤醒“指定的“某个线程
群里有学C#转Java的小朋友问:Java中有木有一个办法唤醒一个"指定的"线程. 熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wa ...
- java中断响应时间_Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的
Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的 Java多线程 sleep方法响应中断 & sleep面试问题(与wait/notify的比较) 文章目 ...
- java不同进程的相互唤醒_Java多线程(二)同步与等待唤醒
1:数据安全问题 1.1:什么情况下会出现数据安全问题? 多个线程对同一个资源进行操作,并且操作资源的语句有多条.那么这个时候这些语句因为cpu的随机性,有可能被多个线程分开执行.导致数据安全问题. ...
- Java 多线程 —— wait 与 notify
引言 认识一下 Object 类中的两个和多线程有关的方法:wait 和 notify. wait,当前线程进入 WAITING 状态,释放锁资源. notify,唤醒等待中的线程,不释放锁资源. 一 ...
- Java多线程中wait, notify and notifyAll的使用
本文为翻译文章,原文地址:http://www.journaldev.com/1037/java-thread-wait-notify-and-notifyall-example 在Java的Obje ...
- Java的wait()、notify()学习三部曲之一:JVM源码分析
原文链接:https://blog.csdn.net/boling_cavalry/article/details/77793224 综述 Java的wait().notify()学习三部曲由三篇文章 ...
最新文章
- 我们应该怎么使用网络中赋予我们的权限
- 使用SSM开发一个校友联络的平台系统
- 常用的正则表达式分享
- 程序员如何优雅地使用 Mac?
- LeetCode MySQL 608. 树节点
- 第八讲 函数直接展开成幂级数
- (Note)CIE色度图
- 程序员多次下载的浏览器竟然是它!
- Js 实现十六进制颜色值和RGB颜色值转换整理
- 新冠死亡率居高不下,为什么偏偏是意大利?
- 【svn】svn的Replacing来历及解决办法
- 爱签电子合同:湖北率先实现电子印章跨省互认
- VMware安装、启动虚拟机报错:无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导?
- java推送数据到指定的外部接口
- andriod—Application
- 基于java的自动排课系统
- 大气商务水墨PPT模板
- 信用卡中的“猫腻”用卡人需要注意了!
- 用PowerBuilder开发来电显示软件
- 请编程输出如下规律的N*N方阵。*UUUUUUUU*L*UUUUUU*RLL*UUUU*RRLLL*UU*RRRLLLL**RRRRLLLL**RRRRLLL*D
热门文章
- 装nagios是php怎么配置文件,nagios安装配置
- Halcon 算子 trans_from_rgb以及图像格式
- 前端开发中79条不可忽视的知识点汇总
- Python Docker 镜像使用yum命令报错 except KeyboardInterrupt, e: SyntaxError: invalid syntax
- RequestMapping注解
- Java获取游戏头像_小程序最新获取用户昵称和头像的方法总结
- Java中UUID的简单介绍
- linux sed 倒数,linux的sed命令
- ORB-SLAM2源码笔记(4)——帧Frame和关键帧KeyFrame
- 【秒杀系统】秒杀系统实战(五): 如何优雅的完成订单异步处理