设为首页收藏本站

小牛社区-大数据学习交流社区|大数据免费学习资源

 找回密码
 立即注册!

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 135|回复: 0

Java里如何实现线程间通信

[复制链接]

177

主题

0

帖子

9

积分

吃土小白

Rank: 1

积分
9
发表于 2017-10-24 16:16:16 | 显示全部楼层 |阅读模式
原文出处: wingjay
  正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。
  本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarrier, FutureTask, Callable 等。
  本文涉及代码:
  http://github.com/wingjay/HelloJava/blob/master/multi-thread/src/ForArticle.java
  下面我从几个例子作为切入点来讲解下 Java 里有哪些方法来实现线程间通信。
 如何让两个线程依次执行?
那如何让 两个线程按照指定方式有序交叉运行呢?
四个线程 A B C D,其中 D 要等到 A B C 全执行完毕后才执行,而且 A B C 是同步运行的
三个运动员各自准备,等到三个人都准备好后,再一起跑
子线程完成某件任务后,把得到的结果回传给主线程
如何让两个线程依次执行? 
  假设有两个线程,一个是线程 A,另一个是线程 B,两个线程分别依次打印 1-3 三个数字即可。我们来看下代码:
 private static void demo1() { 
  Thread A = new Thread(new Runnable() { 
  @Override 
  public void run() { 
  printNumber("A"); 
  } 
  }); 
  Thread B = new Thread(new Runnable() { 
  @Override 
  public void run() { 
  printNumber("B"); 
  } 
  }); 
  A.start(); 
  B.start(); 
}
  其中的 printNumber(String) 实现如下,用来依次打印 1, 2, 3 三个数字:
 private static void printNumber(String threadName) { 
  int i=0; 
  while (i++ 
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

快速回复 返回顶部 返回列表