Java精通并发-wait与notify方法案例剖析与详解
在上一节中对Object的wait、notify、notifyAll方法进行了总结,这次举一个具体案例来进行巩固,题目如下:
编写一个多线程程序,实现这样的一个目标:
1、存在一个对象,该对象有一个int类型的成员变量counter,该成员变量的初始值为0。
2、创建两个线程,其中一个线程对该对象的成员变量counter增1,另一个线程对该对象的成员变量减1。
3、输出该对象成员变量counter每次变化后的值。
4、最终输出的结果应为:101010101010。。。。
分析:
1、会创建两个线程。
2、有一个对象,里面有一个int类型的counter成员。
3、对象里面有两个方法,一个方法是对成员变量counter++,一个方法是对成员变量counter--。
4、需要对方法进行线程同步处理,不进行同步不可能达到交替执行的。
5、会有线程之间的通讯手段,也就是肯定会有notify()、wait()相关的控制,也就是正好可以实践一下这俩方法的作用。
开撸:
先新建一个对象类:

然后再定义两个成员方法,先定义增加方法:

类似的,再定义另一个减操作:

好,接下来定义两个线程:

类似的,再定义一个减操作的线程:

好,一切就绪,接下来就定义一个main方法来调用一下,看是否解答了这个习题:

好,看一下运行结果:

嗯~~"貌似"完美实现了,我在貌似这个字眼上加重了,很明显肯定是不完美的,具体为啥不完美,下次再继续。
Java精通并发-wait与notify方法案例剖析与详解的更多相关文章
- Java精通并发-wait与notify及线程同步系统总结
		notifyAll(): 在上两次中对于Object的wait()和notify()方法的官方doc进行了通读,上一次https://www.cnblogs.com/webor2006/p/11407 ... 
- Java使用wait() notify()方法操作共享资源详解_java - JAVA
		文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Java多个线程共享资源: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方 ... 
- Java精通并发-wait与sleep方法字节码分析
		在上一次https://www.cnblogs.com/webor2006/p/11372521.html中对于Thread类和Runnable接口有了一个基本的认识,这次咱们继续巩固基础,首先先新建 ... 
- 《精通并发与Netty》学习笔记(15 - 详解NIO中Buffer之position,limit,capacity)
		一.前言熟悉NIO的人想必一定不会陌生buffer中position,limit,capacity这三个属性吧,之前在学习的时候遇到一个问题:就是当你先往缓冲区写入一部分数据,然后调用flip()方法 ... 
- 《精通并发与Netty》学习笔记(12 - 详解NIO (三) SocketChannel、Pipe)
		一.SocketChannelJava NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel ... 
- 《精通并发与Netty》学习笔记(11 - 详解NIO (二) 分散/聚集 Scatter/Gather、Selector)
		一.分散/聚集 Scatter/Gather scatter/gather指的在多个缓冲区上实现一个简单的I/O操作,比如从通道中读取数据到多个缓冲区,或从多个缓冲区中写入数据到通道:scatter( ... 
- 《精通并发与Netty》学习笔记(10 - 详解NIO (一) Channel、Buffer )
		一.Java NIO 概述 Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Bu ... 
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
		提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ... 
- Java集合中List,Set以及Map等集合体系详解
		转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ... 
随机推荐
- [LeetCode] 399. Evaluate Division 求除法表达式的值
			Equations are given in the format A / B = k, where A and B are variables represented as strings, and ... 
- 阿里云移动推送 ios项目添加SDK步骤
			添加阿里云Pods仓库和各产品SDK Pod依赖,配置步骤如下: 1. CocoaPods集成添加阿里云Pods仓库,Podfile添加: source 'https://github.com/ali ... 
- linux echo -e 处理特殊字符
			linux echo -e 处理特殊字符 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:\a 发出警告声:\b 删除前一个字符:\c 最后不加上换行符号:\f 换行但光标仍旧停留 ... 
- Knockout.js之初印象
			最近在学Knockout.js,想要把看到的东西用blog记录下来. Knockout.js是一个MVVM的框架,突然想起之前有人问我哪些是MVVM框架?我回答了angular.js和bootstra ... 
- react-native样式里面的一些坑
			在我们做react-native项目时,引入css样式之后 控制台报下面的这样的错 解决问题的方法是: 报错的代码 改后的代码 
- CodeForces-1152C-Neko does Maths
			C. Neko does Maths time limit per test:1 second memory limit per test:256 megabytes input:standard i ... 
- Appium_Page object设计模式
			Page object设计模式思维,把app按页面去划分,一个页面就是一个page对象 每个页面的元素集中管理.页面上按钮操作方法单独封装 # __author__ = " Caric Le ... 
- Codeforces Round #567 Div. 2
			A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 ... 
- Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂
			在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过 ... 
- mabatis缓存
			一级缓存 public static SqlSession getSqlSession() { String resource = "mybatis-config.xml"; In ... 
