在线程等待的间隙,其他的线程会进行唤醒的操作,这时候我们要用的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()的唤醒相关推荐

  1. java 等待 唤醒_Java之等待唤醒机制的代码实现

    各位小伙伴们大家好,在之前的文章中,小编陆陆续续讲了很多关于线程还有等待唤醒机制的一些知识,这次小编要讲的是等待唤醒机制的代码实现. 就用快递员送快递,我们取快递来举例,首先要进行需求分析.主要有两个 ...

  2. java notify 用法_Java notify的使用

    半路出家学习java, 花了几分钟简单看了.在早上那个例子上稍微改了下, notify 对象上必须使用 synchronized 我的理解是在java synchronized只是个线程同步标志,但是 ...

  3. java sleep唤醒_JAVA wait(), notify(),sleep详解(转)

    在JAVA中,是没有类似于PV操作.进程互斥等相干的方法的.JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的 ...

  4. java线程唤醒线程_Java中如何唤醒“指定的“某个线程

    群里有学C#转Java的小朋友问:Java中有木有一个办法唤醒一个"指定的"线程. 熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wa ...

  5. java中断响应时间_Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的

    Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的 Java多线程 sleep方法响应中断 & sleep面试问题(与wait/notify的比较) 文章目 ...

  6. java不同进程的相互唤醒_Java多线程(二)同步与等待唤醒

    1:数据安全问题 1.1:什么情况下会出现数据安全问题? 多个线程对同一个资源进行操作,并且操作资源的语句有多条.那么这个时候这些语句因为cpu的随机性,有可能被多个线程分开执行.导致数据安全问题. ...

  7. Java 多线程 —— wait 与 notify

    引言 认识一下 Object 类中的两个和多线程有关的方法:wait 和 notify. wait,当前线程进入 WAITING 状态,释放锁资源. notify,唤醒等待中的线程,不释放锁资源. 一 ...

  8. Java多线程中wait, notify and notifyAll的使用

    本文为翻译文章,原文地址:http://www.journaldev.com/1037/java-thread-wait-notify-and-notifyall-example 在Java的Obje ...

  9. Java的wait()、notify()学习三部曲之一:JVM源码分析

    原文链接:https://blog.csdn.net/boling_cavalry/article/details/77793224 综述 Java的wait().notify()学习三部曲由三篇文章 ...

最新文章

  1. 我们应该怎么使用网络中赋予我们的权限
  2. 使用SSM开发一个校友联络的平台系统
  3. 常用的正则表达式分享
  4. 程序员如何优雅地使用 Mac?
  5. LeetCode MySQL 608. 树节点
  6. 第八讲 函数直接展开成幂级数
  7. (Note)CIE色度图
  8. 程序员多次下载的浏览器竟然是它!
  9. Js 实现十六进制颜色值和RGB颜色值转换整理
  10. 新冠死亡率居高不下,为什么偏偏是意大利?
  11. 【svn】svn的Replacing来历及解决办法
  12. 爱签电子合同:湖北率先实现电子印章跨省互认
  13. VMware安装、启动虚拟机报错:无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导?
  14. java推送数据到指定的外部接口
  15. andriod—Application
  16. 基于java的自动排课系统
  17. 大气商务水墨PPT模板
  18. 信用卡中的“猫腻”用卡人需要注意了!
  19. 用PowerBuilder开发来电显示软件
  20. 请编程输出如下规律的N*N方阵。*UUUUUUUU*L*UUUUUU*RLL*UUUU*RRLLL*UU*RRRLLLL**RRRRLLLL**RRRRLLL*D

热门文章

  1. 装nagios是php怎么配置文件,nagios安装配置
  2. Halcon 算子 trans_from_rgb以及图像格式
  3. 前端开发中79条不可忽视的知识点汇总
  4. Python Docker 镜像使用yum命令报错 except KeyboardInterrupt, e: SyntaxError: invalid syntax
  5. RequestMapping注解
  6. Java获取游戏头像_小程序最新获取用户昵称和头像的方法总结
  7. Java中UUID的简单介绍
  8. linux sed 倒数,linux的sed命令
  9. ORB-SLAM2源码笔记(4)——帧Frame和关键帧KeyFrame
  10. 【秒杀系统】秒杀系统实战(五): 如何优雅的完成订单异步处理