Wait/notify

可以实现线程间的通信

Wait方法,释放锁
Notify方法,不释放锁

Wait与notify方法
必须配置synchronize使用

package com.bjsxt.base.conn008;import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.LinkedBlockingQueue;/*** wait notfiy 方法,wait释放锁,notfiy不释放锁**/
public class ListAdd2 {private volatile static List list = new ArrayList();public void add() {list.add("bjsxt");}public int size() {return list.size();}public static void main(String[] args) {final ListAdd2 list2 = new ListAdd2();// 1 实例化出来一个 lock// 当使用wait 和 notify 的时候 , 一定要配合着synchronized关键字去使用final Object lock = new Object();final CountDownLatch countDownLatch = new CountDownLatch(1);Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {try {synchronized (lock) {for (int i = 0; i < 10; i++) {list2.add();System.out.println("当前线程:" + Thread.currentThread().getName() + "添加了一个元素..");Thread.sleep(500);if (list2.size() == 5) {System.out.println("已经发出通知..");countDownLatch.countDown();lock.notify();}}}} catch (InterruptedException e) {e.printStackTrace();}}}, "t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {if (list2.size() != 5) {try {System.out.println("t2进入...");lock.wait();countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("当前线程:" + Thread.currentThread().getName() + "收到通知线程停止..");throw new RuntimeException();}}}, "t2");t2.start();t1.start();}}

运行

线程t2执行,wait释放锁
线程t1执行,notify并没有是释放锁

等待线程t1,执行完毕
跳出synchronize代码块,线程t2才会执行

线程通信wait与notify相关推荐

  1. 多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用

    线程通信-wait和notify方法介绍: java.lang.Object类提供类两类用于操作线程通信的方法. wait():执行该方法的线程对象释放同步锁,JVM把该线程存放到等待池中,等待其他的 ...

  2. Java多线程(5)--线程通信wait和notify

    例题:使用两个线程打印 1-100.线程1, 线程2 交替打印. 解决:涉及wait()和notify()/notifyAll() class Communicate implements Runna ...

  3. java重点基础:线程和同步锁和线程通信

    学习线程的主要知识点概要如下: 进程和线程的区别:  *     1.进程:操作系统而言,进程就是程序,多进程就是多个程序同时执行  *         一个进程包含一个~多个线程,每一个进程都有自己 ...

  4. 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析

    文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...

  5. 高并发编程-线程通信_使用wait和notify进行线程间的通信

    文章目录 概述 场景 引子 synchronized wait/notify机制 synchronized wait/notify 改造 问题 概述 Java中线程通信协作的最常见的两种方式: syn ...

  6. Thread之线程通信(wait和notify)

    目录 线程通信的定义 轮询实现 结论 wait和notify实现 wait方法 nofify方法 结论 补充说明 线程通信的定义 线程是程序中独立的个体,但这些个体如果不经过处理就不能成为一个整体.线 ...

  7. 为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object类里

    关于wait().notify()的使用 public class WaitDemo {     public static Object object = new Object();        ...

  8. C++多线程:Linux 线程通信,唤醒,互斥锁(未完待续)

    c++ multi thread message sending and notify 线程通信常用的方法有共享内存和消息传递,推荐使用消息传递. 最常用的就是管道了,可以使用匿名管道或者命名管道. ...

  9. 多线程总结五:线程通信(一)

    当线程在程序中运行时,线程的调度具有一定的透明性,程序通常无法准确控制线程的轮换执行,Java提供了一些机制来保证线程协调运行. 1.传统的线程通信借助Object类提供的wait().notify( ...

最新文章

  1. 边界测试——让BUG现形
  2. eclipse部分快捷操作
  3. linux下的DNS服务器详解
  4. Myeclipse2015把web项目添加至tomcat中,添加列表中却没有想要添加的项目
  5. 【拉普拉斯机制代码实现demo】差分隐私代码实现系列(四)
  6. linux usb驱动u盘启动不了,Linux环境下USB的原理、驱动和配置(4)
  7. 力扣20. 有效的括号(JavaScript)
  8. 信息系统项目管理师论文范围管理范文(2021上半年范围管理论文)
  9. 电子科技大学格拉斯哥学院英文教材使用效果
  10. 年报文本分析:jieba词频统计
  11. 写给海布里之王—亨利
  12. jenkins 日常踩坑 和 瞎扯解决办法
  13. WPA3的特点有哪些?
  14. metasploit unleashed(Chinese Simplified Edition)-8
  15. [Python] 随机抽样
  16. 正则表达式(三)正则的捕获
  17. JS数组 编程练习 使用Javascript语言,把以下数组 在页面显示如下图所示的图案
  18. php redis中set、setex、setnx、getSet的区别
  19. 安搭Share :青藏高原发现10万年前古人类DNA
  20. 【验证码逆向专栏】极验三代、四代点选类验证码逆向分析

热门文章

  1. 最小割板子题——[USACO5.4]奶牛的电信
  2. web app指南之构建html5离线应用
  3. stm32f102 SPI口重复初始化引起的问题及解决办法
  4. cout 输出指定位数,不足补0
  5. esp8266make相关文件改进
  6. android 外文期刊_AndroSimilar: Robust signature for detecting variants of Android malware
  7. Hyperledger Fabric 核心模块(6)Fabric-ca-server
  8. A题 Go! Fun游长三角 2021年第一届长三角高校数学建模竞赛
  9. 76. 最小覆盖子串(滑动窗口)
  10. python自动化—web页面操作之窗口切换