线程通信wait与notify
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相关推荐
- 多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用
线程通信-wait和notify方法介绍: java.lang.Object类提供类两类用于操作线程通信的方法. wait():执行该方法的线程对象释放同步锁,JVM把该线程存放到等待池中,等待其他的 ...
- Java多线程(5)--线程通信wait和notify
例题:使用两个线程打印 1-100.线程1, 线程2 交替打印. 解决:涉及wait()和notify()/notifyAll() class Communicate implements Runna ...
- java重点基础:线程和同步锁和线程通信
学习线程的主要知识点概要如下: 进程和线程的区别: * 1.进程:操作系统而言,进程就是程序,多进程就是多个程序同时执行 * 一个进程包含一个~多个线程,每一个进程都有自己 ...
- 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...
- 高并发编程-线程通信_使用wait和notify进行线程间的通信
文章目录 概述 场景 引子 synchronized wait/notify机制 synchronized wait/notify 改造 问题 概述 Java中线程通信协作的最常见的两种方式: syn ...
- Thread之线程通信(wait和notify)
目录 线程通信的定义 轮询实现 结论 wait和notify实现 wait方法 nofify方法 结论 补充说明 线程通信的定义 线程是程序中独立的个体,但这些个体如果不经过处理就不能成为一个整体.线 ...
- 为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object类里
关于wait().notify()的使用 public class WaitDemo { public static Object object = new Object(); ...
- C++多线程:Linux 线程通信,唤醒,互斥锁(未完待续)
c++ multi thread message sending and notify 线程通信常用的方法有共享内存和消息传递,推荐使用消息传递. 最常用的就是管道了,可以使用匿名管道或者命名管道. ...
- 多线程总结五:线程通信(一)
当线程在程序中运行时,线程的调度具有一定的透明性,程序通常无法准确控制线程的轮换执行,Java提供了一些机制来保证线程协调运行. 1.传统的线程通信借助Object类提供的wait().notify( ...
最新文章
- 边界测试——让BUG现形
- eclipse部分快捷操作
- linux下的DNS服务器详解
- Myeclipse2015把web项目添加至tomcat中,添加列表中却没有想要添加的项目
- 【拉普拉斯机制代码实现demo】差分隐私代码实现系列(四)
- linux usb驱动u盘启动不了,Linux环境下USB的原理、驱动和配置(4)
- 力扣20. 有效的括号(JavaScript)
- 信息系统项目管理师论文范围管理范文(2021上半年范围管理论文)
- 电子科技大学格拉斯哥学院英文教材使用效果
- 年报文本分析:jieba词频统计
- 写给海布里之王—亨利
- jenkins 日常踩坑 和 瞎扯解决办法
- WPA3的特点有哪些?
- metasploit unleashed(Chinese Simplified Edition)-8
- [Python] 随机抽样
- 正则表达式(三)正则的捕获
- JS数组 编程练习 使用Javascript语言,把以下数组 在页面显示如下图所示的图案
- php redis中set、setex、setnx、getSet的区别
- 安搭Share :青藏高原发现10万年前古人类DNA
- 【验证码逆向专栏】极验三代、四代点选类验证码逆向分析
热门文章
- 最小割板子题——[USACO5.4]奶牛的电信
- web app指南之构建html5离线应用
- stm32f102 SPI口重复初始化引起的问题及解决办法
- cout 输出指定位数,不足补0
- esp8266make相关文件改进
- android 外文期刊_AndroSimilar: Robust signature for detecting variants of Android malware
- Hyperledger Fabric 核心模块(6)Fabric-ca-server
- A题 Go! Fun游长三角 2021年第一届长三角高校数学建模竞赛
- 76. 最小覆盖子串(滑动窗口)
- python自动化—web页面操作之窗口切换