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 ...
随机推荐
- Netty-核心模块组件-4
Netty 核心模块组件 一.Bootstrap.ServerBootstrap 1.Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 N ...
- 阿里二面:SpringBoot可以同时处理多少个请求?当场懵了。。。。
SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性,为开发者提供了构建高性能后端服务的便利.然而,当面临高并发场景时,理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重 ...
- .NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)
21 | 中间件:掌控请求处理过程的关键 如果在 Map 的时候逻辑复杂一点,不仅仅判断它的 URL 地址,而且要做特殊的判断的话,可以这么做把判断逻辑变成一个委托 我们要判断当我们的请求地址包含 a ...
- Hadoop-Operation category READ is not supported in state standby 故障解决
在查询hdfs时或者执行程序向hdfs写入数据时遇到报错:Operation category READ is not supported in state standby 意思是:该主机状态为待机, ...
- C# 二十年语法变迁之 C# 8参考
C# 二十年语法变迁之 C# 8参考 自从 C# 于 2000 年推出以来,该语言的规模已经大大增加,我不确定任何人是否有可能在任何时候都对每一种语言特性都有深入的了解.因此,我想写一系列快速参考文章 ...
- Linux中出现Perf: interrupt took too long
问题原因: perf: interrupt took too long_雪虎-JL的博客-CSDN博客 解决方法: perf: interrupt took too long (3136 > 3 ...
- DOM和BOM的区别
DOM和BOM的区别 在浏览器中运行的JavaScript可以认为由三部分组成:ECMAScript描述了该语言的语法和基本对象,DOM文档对象模型描述了处理网页内容的方法和接口,BOM浏览器对象模型 ...
- idea自定义代码片段live template
1.介绍 有时在idea编辑器经常会写同一个代码块,那么这个代码块就可以利用live template功能把它定义成可根据关键字触发的代码片段,效果如下图: 2.操作步骤 此处我们就以springbo ...
- Javascript操作对象数组实现增删改查
1.介绍 最近帮朋友弄一个简单的针对json数组的增删改成页面,正好涉及到了js去操作对象数组实现增删改查功能.我估计很多朋友应该也会遇到这类操作,所以记录一下以便分享. 2.数据准备 这里我就以学生 ...
- js与java使用AES加密算法实现前后端加密解密
AES加密算法入门:https://blog.csdn.net/IndexMan/article/details/87284833 第三方crypto.js下载地址:https://download. ...