Java多线程初学者指南(5):join方法的使用
在上面的例子中多次使用到了Thread类的join方法。我想大家可能已经猜出来join方法的功能是什么了。对,join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。下面的代码演示了join的用法
1 package com.fly.join; 2 3 public class JoinThread extends Thread { 4 public static int n = 0; 5 6 static synchronized void inc() { 7 n++; 8 } 9 10 public void run() { 11 for (int i = 0; i < 10; i++) 12 try { 13 inc(); 14 sleep(3); // 为了使运行结果更随机,延迟3毫秒 15 16 } catch (Exception e) { 17 } 18 } 19 20 public static void main(String[] args) throws Exception { 21 22 Thread threads[] = new Thread[100]; 23 for (int i = 0; i < threads.length; i++) 24 // 建立100个线程 25 threads[i] = new JoinThread(); 26 for (int i = 0; i < threads.length; i++) 27 // 运行刚才建立的100个线程 28 threads[i].start(); 29 30 System.out.println("args.length="+args.length); 31 if (args.length > 0) 32 for (int i = 0; i < threads.length; i++) 33 // 100个线程都执行完后继续 34 threads[i].join(); 35 System.out.println("n=" + JoinThread.n); 36 } 37 38 }
建立了100个线程,每个线程使静态变量n增加10。如果在这100个线程都执行完后输出n,这个n值应该是1000。
测试1: 上面运行的结果为不确定值,但是一般不等于1000。 因为并不是所有线程都运行完了,才执行最后的打印“n=" +JoinThread.n
测试2: 将31行代码修改为:args.length >= 0, 则结果输出一定为:1000. 即所有线程都执行完了才执行最后的打印“n=" +JoinThread.n
转载于:https://www.cnblogs.com/dragonflyyi/p/3538488.html
Java多线程初学者指南(5):join方法的使用相关推荐
- Java多线程初学者指南(10):使用Synchronized关键字同步类方法
要想解决"脏数据"的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下: public synchronized void run() { ...
- Java多线程初学者指南(12):使用Synchronized块同步变量
我们可以通过synchronized块来同步特定的静态或非静态方法.要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传 ...
- java多线程同步的四种方法_java中实现多线程的两种方法
java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...
- 多线程中Thread的join方法
多线程中Thread的join方法 join简介 join方法是Thread类中的一个方法,该方法的定义是等待该线程执行直到终止.其实就说join方法将挂起调用线程的执行,直到被调用的对象完成它的执行 ...
- Java 多线程启动为什么调用 start() 方法而不是 run() 方法?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创100W+访问量博客:点击前往,查 ...
- java多线程有几种实现方法_Java多线程之间实现通讯
一.课程目标 多线程之间如何通讯 wait.notify.notifyAll()方法 lock 停止线程 守护线程 Join方法 优先级 Yield 二.多线程之间如何实现通讯 2.1 什么是多线程之 ...
- java多线程实战指南_学习笔记《Java多线程编程实战指南》二
2.1线程属性 属性 属性类型及用途 只读属性 注意事项 编号(id) long型,标识不同线程 是 不适合用作唯一标识 名称(name) String型,区分不同线程 否 设置名称有助于代码调试和问 ...
- Java多线程【三种实现方法】
java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...
- java 多线程并行_Fork and Join: Java Can Excel at Painless Parallel Programming Too! | Oracle 中国...
Java SE 7 提供的新分解/合并任务如何使编写并行程序变得更轻松? 下载: 多核处理器现在已广泛应用于服务器.台式机和便携机硬件.它们还扩展到到更小的设备,如智能电话和平板电脑.由于进程的线程可 ...
最新文章
- python工作-Python工作五年月薪23K,记录一下我的学习经历建议
- svd 分解详细证明
- 中国馆智能视频监控系统
- 使用ulimit设置文件最大打开数
- Git 合并分支选项 --squash 合并提交历史
- 在SQL Server2005中进行错误捕捉
- BugkuCTF-PWN题pwn6-printf超详细讲解(未提供Libc版本)
- Java PipedInputStream connect()方法与示例
- 计算机专业英语作业1,计算机专业英语作业1
- koa2 仿知乎笔记
- 《Reids 设计与实现》第三章 跳跃表
- 小程序文章怎么导出来_微信小程序点餐怎么申请,怎么建立微信点单小程序
- 明月传说怎么在电脑上玩 明月传说电脑版玩法攻略
- 重新学习FPGA(一):EDA技术
- bootstrap 下拉列表获取_Bootstrap框架下下拉菜单的实现(代码示例)
- 《微信小程序》音乐播放器项目
- 智能客服搭建(2) - MRCP Server ASR插件开发
- The JSP specification requires that an attribute name is preceded by whitespace出现错误
- Spring系列:2021年Java春招面试经历,内容太过真实
- 容联七陌助力VIPKID,优质客户服务赢得家长青睐