源代码如下

public class TranditionalThreadCommunication {

/**

* @param args

*/

public static void main(String[] args) {

final Business business = new Business();

new Thread(new Runnable() {

@Override

public void run() {

for(int i = 0; i<50;i++){

business.sub(i);

}

}

}).start();

for(int i = 0; i < 50; i++){

business.main(i);

}

}

}

/**

* 这个类是线程同步的

* @author gavinlin

*

*/

class Business{

private boolean bShouldSub = true;

public synchronized void sub(int i){

while(bShouldSub){

try {

this.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

for(int j=0;j<10;j++){

System.out.println("subThread" + j +"loop " + i);

}

bShouldSub = !bShouldSub;

this.notify();

}

public synchronized void main(int i){

while(!bShouldSub){

try {

this.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

for(int j=0;j<100;j++){

System.out.println("mainThread" + j + "loop " + i);

}

bShouldSub = !bShouldSub;

this.notify();

}

}

上面的代码干了什么?

1.主要看main方法,生成了一个Business类的对象(先不管business里是干什么用的),然后开一个线程,循环50次调用business.sub,主线程也循环50次调用business.main

2.看看business里面实现了什么,sub方法就是重复10次打印信息,main方法重复100次调用打印信息。两个方法都做了同步,bShouldSub判断是否该运行方法,wait方法和notify方法是这里的重点,作用是如果该方法不该运行就阻塞(运行wait),方法运行完调用notify(通知正在wait的方法可以往下执行了)。

3.根据1和2,可以得出其运行结果是调用同一个business时sub打印10次信息,再到main打印100次信息,重复上述步骤50次

java同步通信_java-线程-线程同步通信技术相关推荐

  1. java 锁_Java之线程并发的各种锁、锁、锁

    因为两周没更新了... 也不是懒,这两周确实有些忙,赶项目进度赶的不亦乐乎... 终于赶在工期前,可以进入内测了,我也有了些时间,可以更新啦... 线程并发锁是很常见的问题,而且在Java中锁的类型. ...

  2. java 堆栈_Java中线程与堆栈的关系

    栈是线程私有的,每个线程都是自己的栈,每个线程中的每个方法在执行的同时会创建一个栈帧用于存局部变量表.操作数栈.动态链接.方法返回地址等信息.每一个方法从调用到执行完毕的过程,就对应着一个栈帧在虚拟机 ...

  3. java 线程假醒_Java并发基础05. 传统线程同步通信技术

    先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次--如此往返执行50次. 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首 ...

  4. java什么时候需要同步_JAVA中线程在什么时候需要同步和互斥

    JAVA中线程在什么时候需要同步和互斥 关注:265  答案:6  mip版 解决时间 2021-01-27 08:10 提问者时光易老 2021-01-27 03:32 JAVA中线程在什么时候需要 ...

  5. 线程系列3--Java线程同步通信技术

    上一篇文章我们讲解了线程间的互斥技术,使用关键字synchronize来实现线程间的互斥技术.根据不同的业务情况,我们可以选择某一种互斥的方法来实现线程间的互斥调用.例如:自定义对象实现互斥(sync ...

  6. java线程安全性_Java并发-线程安全性

    1.什么是线程安全性? 在线程安全性的定义中,最核心的就是正确性.当多线程访问调用某个类时,线程之间不会出现错误的交互,不管运行时线程如何交替执行,并且在主调代码不需要任何同步或协同,这个类都能表现出 ...

  7. Java并发编程之线程同步

    线程安全就是防止某个对象或者值在多个线程中被修改而导致的数据不一致问题,因此我们就需要通过同步机制保证在同一时刻只有一个线程能够访问到该对象或数据,修改数据完毕之后,再将最新数据同步到主存中,使得其他 ...

  8. Java线程:线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public  ...

  9. Java的知识点31——线程同步

    线程同步--并发控制 并发:同一个对象多个线程同时操作 线程不安全: 数据有负数.相同 开辟多线程,每个线程都有自己的工作空间  与 主存 进行交互 /*** 线程不安全: 数据有负数.相同* @au ...

最新文章

  1. 将Project的内容导出成单独的XPO文件
  2. VBA赋值给指定单元格
  3. 5GS 协议栈 — PFCP 协议 — URR 用量上报规则
  4. Django-分页扩展
  5. 无法打开包括文件:“osgGA/MatrixManipulator”:No such file or directory
  6. 浅谈C++类(6)--复制构造函数
  7. 作者:季统凯(1972-),男,博士,中国科学院云计算产业技术创新与育成中心研究员...
  8. 3.14圆周率节,这5本书带你领略数学的魅力
  9. 面试精讲之面试考点及大厂真题 - 分布式专栏 09 缓存必问:Reids持久化,高可用集群
  10. python中continue用法案例_记录今天学习python中for与while循环针对break和continue的用法...
  11. EasyUI Easyloader 加载器
  12. 线性代数及其应用:绪论
  13. JScriptJQuery学习
  14. Numpy图解(三)--高维数组
  15. Python漫画爬虫开源 66漫画 AJAX,包含数据库连接,图片下载处理
  16. GPS坐标间距离计算
  17. 微信指纹服务器,华为公布10月底完成微信指纹适配,网友:等了三年终于有结果...
  18. 9秒学院-技术宅七夕示爱招数“高大上”赶快来看看
  19. python全栈是什么
  20. 第13章-Swing(2)--BeatBox-总结与实例

热门文章

  1. hbase 架构和存储
  2. 中审咨询政府行业远程接入解决方案
  3. 解决由于Windows Installer造成的SAV安装失败的问题
  4. Linux 命令(71)—— ldconfig 命令
  5. Bat脚本处理ftp超强案例解说
  6. java基础总结(1)安装jdk
  7. express 项目文件目录说明及功能描述
  8. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(三)
  9. js charCodeAt() charAt()
  10. 【系统架构】大规模的C++项目代码层次结构