Java 线程通信 例子:使用俩个线程打印1-100.线程1 线程2 交替打印
1 package bytezero.threadcommunication;
2
3 /**
4 * 线程通信的例子:使用俩个线程打印1-100.线程1 线程2 交替打印
5 *
6 * 涉及到的三个方法:
7 * wait(); 一旦执行此方法,当前线程就进入了阻塞状态,并释放同步监视器
8 * notify(); 一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就
9 * 唤醒优先级高的线程
10 * notifyAll(); 一旦执行此方法,就会唤醒被wait的所有线程
11 *
12 *说明:
13 * 1.wait();notify(); notifyAll(); 这三个方法必须使用在同步代码块或同步方法中。
14 * 2.wait();notify(); notifyAll();这三个方法调用者必须是同步代码块或同步方法的
15 * 同步监视器,否则会出现 IllegalMonitorStateException异常
16 *3.wait();notify(); notifyAll();这三个方法定义在 java.lang.Object类中。
17 *
18 * 面试题:slepp() 和 wait()的异同?
19 * 1.相同点:一旦执行方法,都可以使得当前线程进入阻塞状态
20 * 2.不同点:1)两个方法声明的位置不同:Thread类中声明sleep(),Object类声明wait()
21 * 2)调用的要求不同:sleep(); 可以在任何需要的场景下调用
22 * wait()必须使用在同步代码块或同步方法中
23 * 3)关于是否释放同步监视器:如果两个方法都使用在同步代码块或同步方法中,
24 * sleep() 不会释放 同步监视器,wait()会释放同步监视器
25 * @author Bytezero1·zhenglei! Email:420498246@qq.com
26 * create 2021-10-18 15:29
27 */
28
29 class Number implements Runnable{
30 private int number = 1;
31 private Object obj = new Object();
32
33 @Override
34 public void run() {
35 while (true){
36 synchronized (this) {
37 this.notify();
38
39 if(number <= 100){
40 try {
41 Thread.sleep(100);
42 } catch (InterruptedException e) {
43 e.printStackTrace();
44 }
45
46 System.out.println(Thread.currentThread().getName()+":"+number);
47 number++;
48
49 try {
50 //使得调用如下 wait()方法的线程进入阻塞状态
51 wait();
52 } catch (InterruptedException e) {
53 e.printStackTrace();
54 }
55
56 }else{
57 break;
58 }
59 }
60 }
61
62 }
63 }
64 public class CommunicationTest {
65 public static void main(String[] args) {
66 Number number = new Number();
67 Thread t1 = new Thread(number);
68 Thread t2 = new Thread(number);
69
70 t1.setName("线程1");
71 t2.setName("线程1");
72
73 t1.start();
74 t2.start();
75 }
76 }

Java 线程通信 例子:使用俩个线程打印1-100.线程1 线程2 交替打印的更多相关文章
- java多线程通信 例子
package com.cl.www.thread; public class NumberHolder { private Integer number = 0; // 增加number publi ...
- JAVA基础知识之多线程——线程通信
传统的线程通信 Object提供了三个方法wait(), notify(), notifyAll()在线程之间进行通信,以此来解决线程间执行顺序等问题. wait():释放当前线程的同步监视控制器,并 ...
- 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)
Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...
- JAVA多线程提高二:传统线程的互斥与同步&传统线程通信机制
本文主要是回顾线程之间互斥和同步,以及线程之间通信,在最开始没有juc并发包情况下,如何实现的,也就是我们传统的方式如何来实现的,回顾知识是为了后面的提高作准备. 一.线程的互斥 为什么会有线程的互斥 ...
- Java并发——线程安全、线程同步、线程通信
线程安全 进程间"共享"对象 多个“写”线程同时访问对象. 例:Timer实例的num成员,即add()方法是用的次数.即Timer实例是资源对象. class TestSync ...
- Java多线程-同步:synchronized 和线程通信:生产者消费者模式
大家伙周末愉快,小乐又来给大家献上技术大餐.上次是说到了Java多线程的创建和状态|乐字节,接下来,我们再来接着说Java多线程-同步:synchronized 和线程通信:生产者消费者模式. 一.同 ...
- Qt中跨进程Socket通信以及socket跨线程通信
一 QTcpServer 创建流程 创建套接字服务器 QTcpServer 对象, 通过 QTcpServer 对象设置监听,即:QTcpServer::listen() 基于 QTcpServer: ...
- java多线程-线程通信
线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...
- Java核心知识点学习----使用Condition控制线程通信
一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...
- java多线程基本概述(五)——线程通信
线程之间的通信可以通过共享内存变量的方式进行相互通信,也可以使用api提供的wait(),notify()实现线程之间的通信.wait()方法是Object类的方法,改方法用来将当前的线程置入&quo ...
随机推荐
- 【小分享】vm-storage中,计算metric的平均长度
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 表达式如下: sum by (type) (vm_cach ...
- 爬虫逆向基础,认识 SM1-SM9、ZUC 国密算法
关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! [01x00] 简介 国密即国家密码局认定的国产加密算法,爬虫工程师在做 JS 逆向的时候,会遇 ...
- 从零开始配置vim(30)——DAP的其他配置
很抱歉这么久才来更新这一系列,主要是来新公司还在试用期,我希望在试用期干出点事来,所以摸鱼的时间就少了.加上前面自己阳了休息了一段时间.在想起来更新就过去一个多月了.废话不多说了,让我们开始进入正题. ...
- mac中virtualBox添加主机网络报错VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory
mac中virtualBox添加主机网络报错 现场复原 解决方法 参考 mac中virtualBox添加主机网络报错 现场复原 virtual box添加主机网络报错 VBoxNetAdpCtl: E ...
- SqlSugar子查询
1.基础教程 1.1 API目录 *****只查一列***** //First: SqlFunc.Subqueryable<School>().Where(s => s.Id == ...
- 样本数量不平衡问题方案(Focal Loss & Circle Loss)
1.Focal Loss focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题.本文试图从交叉熵损失函数出发,分析数据不平衡问题,focal loss与交叉熵损失 ...
- Flask Paginate实现表格分页
flask_paginate 是 Flask 框架的一个分页扩展,用于处理分页相关的功能.它可以帮助你在 Flask Web 应用程序中实现分页功能,让用户可以浏览大量数据的不同部分.本篇博文重点讲述 ...
- vue + elementui 分页切换页面,缓存页码
问题场景 列表页面输入查询条件,选择第3页,点击详情进入详情页,从详情页返回时,默认列表页面页码重置为1:此时想要缓存该页码,有两种方式:可按业务场景使用 方式一:用vue自带的 keep-alive ...
- 群联预告满血PCIe 5.0 SSD主控:飙上14.7GB/s
群联电子将在CES 2024上展示两款新的PCIe 5.0 SSD主控方案,一个定位旗舰,一个面向主流. PCIe 5.0 SSD诞生已经差不多一年了,但是受限于群联E26主控的先天不足,以及闪存技术 ...
- 多路转接高性能IO服务器|select|poll|epoll|模型详细实现
前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014 ...