上一篇说到了suspend()和resume()方法,这一篇咋们继续,接着来介绍wait()和notify()方法,我们都知道这两个方法和之前介绍的方法不太一样,那就是这两个方法是对象Object上的,不属于Thread类上的。我们也知道这两个方法是实现多个线程之间的通信和互斥的,不多说了,下面就来看一下例子吧:
例子描述:
开启两个线程,子线程循环10次,主线程循环100次,如此反复循环50次
代码如下:
-
packagecn.itcast.heima;
-
-
publicclassTraditionalThreadCommunication{
-
-
publicstaticvoidmain(String[]args){
-
finalBusinessbusiness=newBusiness();
-
-
newThread(newRunnable(){
-
@Override
-
publicvoidrun(){
-
for(inti=0;i<50;i++){
-
business.sub(i);
-
}
-
}
-
}).start();
-
-
-
for(inti=0;i<50;i++){
-
business.main(i);
-
}
-
-
}
-
-
-
-
-
-
-
staticclassBusiness{
-
privatebooleanbShouldSub=true;
-
publicsynchronizedvoidsub(inti){
-
-
-
while(!bShouldSub){
-
try{
-
-
this.wait();
-
}catch(InterruptedExceptione){
-
e.printStackTrace();
-
}
-
}
-
-
for(intj=0;j<=10;j++){
-
System.out.println("subthreadsequeceof"+j+",loopof"+i);
-
}
-
bShouldSub=false;
-
this.notify();
-
}
-
-
publicsynchronizedvoidmain(inti){
-
while(bShouldSub){
-
try{
-
this.wait();
-
}catch(InterruptedExceptione){
-
e.printStackTrace();
-
}
-
}
-
for(intj=0;j<=100;j++){
-
System.out.println("mainthreadsequeceof"+j+",loopof"+i);
-
}
-
bShouldSub=true;
-
this.notify();
-
}
-
}
-
-
}
通过wait和notify机制来实现这两个线程的循环的有序性,能够保证子线程循环10次,主线程循环100次这样交替运行。
运行结果很多,这里就不截图了!这里我们也是可以看到的,调用wait方法是会释放锁的,所以他会被用到很多,这个和之前的几个方法是不同的!
注意的两点:
第一:同步代码块中的锁和调用wait和notifiy方法的对象锁一定要是同一个。
第二:wait和notify方法的调用一定要在同步代码块中,不然会报异常,可以自行测试一下。
不要因为这样就结束了,这一篇还不是最终篇,等待下一篇吧!
分享到:
相关推荐
java-object-mapper-benchmark, Java对象到对象映射框架的JMH基准 Object-to-object映射框架微模块多层应用程序通常需要在不同对象模型之间进行映射( 比如 。 ipqos和实体。写这样的锅炉板映射代码是一个令人烦恼和...
Java面向对象(进阶)-- Object类的详细概述
object-oriented-programming-using-java
java-object类java-object类java-object类java-object类java-object类java-object类java-object类java-object类java-object类java-object类
第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...
lazy_object_proxy-1.6.0-cp37-cp37m-win_amd64
前端项目-object-fit-images,在IE9、IE10、IE11、EDGE、Safari等图像上填充多边形对象的大小和对象位置…
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
使用Java作为编程介质,向不同的受众介绍计算机编程。
Java SE程序 覆盖Object中的方法Java SE程序 覆盖Object中的方法Java SE程序 覆盖Object中的方法Java SE程序 覆盖Object中的方法Java SE程序 覆盖Object中的方法Java SE程序 覆盖Object中的方法Java SE程序 覆盖...
本书提出了一种平衡而灵活的方法,可以将面向对象的原理纳入使用Python的入门课程中。
proposal-object-rest-spread, ECMAScript的rest/扩展属性 对象的对象 rest/扩展属性ECMAScript 6为 array literals分配了 rest元素和扩展元素( 用于 array 文本。这个建议引入了类似的rest属性对象literals分配和...
小实例-实现对成绩总分由高到低的排序-Java中数组对象的排序
babel-plugin-object-to-json-parse :rocket: 该存储库受启发只要仅对JSON字符串求值一次,与JavaScript对象文字相比,JSON.parse方法就快得多,尤其是对于冷负载。JSON.parse的对象该插件将对象文字转换为JSON....
Java, Java, Java, Object-Oriented Problem Solving (3rd Edition) 3rd Edition by Ralph Morelli (Author), Ralph Walde (Author) 856 pages (June 25, 2017) 出版社: Prentice Hall; 3 edition Language: ...
介绍java-object-diff是一个简单但功能强大的库,用于查找Java对象之间的差异。 它需要两个对象并生成一个树形结构,该结构表示对象及其子对象之间的任何差异。 然后可以遍历此树以提取更多信息或将更改应用于基础...
正在进行中的一本书,着重介绍如何使用Java语言进行面向对象的多线程设计和编程。
Beginning Java Programming The Object-Oriented Approach-Wrox (2015)
object-oriented-thought-process-5th