线程提供了一个方法:void join() ,join可以协调线程之间的同步运行。
package seday09;
/**
* @author xingsir
* 线程提供了一个方法:void join() ,join可以协调线程之间的同步运行。
* 此方法允许执行这个方法的线程在该方法所属线程后等待,直到该方法所属线程结束后方可继续运行,否则会一致处于 阻塞状态。
* 同步运行:执行有先后顺序
* 异步运行:执行没有先后顺序,多线程就是异步运行的。
*/
public class JoinDemo {
/*
* 例如案例:
* 用线程方式,显示文字,下载图片,显示图片
* 需要显示图片,首先要对图片进行下载,若图片还没有下载完毕就直接展示,此时肯定显展示不出图片。
* 所以需要先下载后显示
*/
private static boolean isFinish = false;//标示图片是否下载完毕
public static void main(String[] args) {
/*
* JDK8之前有一个强制要求(JDK8不强制要求,但是 若存在使用不当情况,编译器仍然会编译失败),
* 当一个方法的局部内部类中引用了这个方法的其他 局部变量时,要求这个变量必须声明为final的,这源自JVM的内存分配问题。
*/
final Thread download =new Thread() {
public void run() {
System.out.println("开始下载图片....");
for(int i=1;i<=100;i++) {//循环到100
System.out.println("下载:"+i+"%");//打印
try {
Thread.sleep(50);//阻塞50毫秒
} catch (InterruptedException e) {
}
}
System.out.println("图片下载完毕!");
isFinish = true;//标示图片已下载完毕
}
};
Thread show = new Thread() {
public void run() {
try {
//显示文字,可以直接显示,异步运行:执行没有先后顺序
System.out.println(">>>开始显示文字...");
Thread.sleep(1000);//阻塞1000毫秒
System.out.println(">>>文字已显示完毕!");
System.out.println(">>>开始显示图片...");
//加载图片之前应当先等待下载线程将图片下载完毕
System.out.println(">>>等待download下载图片...");
download.join();//同步运行:执行有先后顺序,先下载后显示
System.out.println(">>>图片已下载完毕!");
if(!isFinish) {//判断为真
throw new RuntimeException("Error!!图片加载失败!");
}
System.out.println(">>>显示图片完毕!");
} catch (InterruptedException e) {
}
}
};
download.start();//调用
show.start();//调用
}
}
线程提供了一个方法:void join() ,join可以协调线程之间的同步运行。的更多相关文章
- 等待某(N)个线程执行完再执行某个线程的几种方法(Thread.join(),CountDownLatch,CyclicBarrier,Semaphore)
1.main线程中先调用threadA.join() ,再调用threadB.join()实现A->B->main线程的执行顺序 调用threadA.join()时,main线程会挂起,等 ...
- 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print
package zuoye; public class print { void output() { System.out.println("100-999之间的水仙花数是:") ...
- 编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。
package zuoye; public class print1 { String a="abcdefghigklmnopqrstuvwxyz"; String B=" ...
- 首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。
package lianxi; public class Print_1 { int x; Print_1(int x) { this.x = x; } void outPut() { String ...
- .编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。
package com.homework.zw; //类Print部分 public class Print1 { int x; void output() { if(x==1) { for(int ...
- 7.编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。
package com.bao; public class Print1 { int x; void output() { if(x==1) { System.out.println("AB ...
- 6.编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print。
Print类: package com.bao; public class Print { int g,s,b; void outPut() { for(int i=100;i<1000;i++ ...
- Java多线程 线程状态及转换 wait sleep yield join
线程的状态转化关系(1). 新建状态(New):新创建了一个线程对象.(2). 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- 【spring data jpa】使用spring data jpa时,关于service层一个方法中进行【删除】和【插入】两种操作在同一个事务内处理
场景: 现在有这么一个情况,就是在service中提供的一个方法是先将符合条件的数据全部删除,然后再将新的条件全部插入数据库中 这个场景需要保证service中执行两步 1.删除 2.插入 这两步自然 ...
随机推荐
- ganglia 一站式部署
1 ganglia集群监测系统简介 1.1 ganglia简介 ganglia是一款为HPC(高性能计算) 集群设计的可扩展性 的分布式监控系统,它可以监视和显示集群中节点的各种状 ...
- Java基础面试题及答案(二)
容器 18. java 容器都有哪些? 常用容器的图录: 19. Collection 和 Collections 有什么区别? java.util.Collection 是一个集合接口(集合类的一个 ...
- Go语言冒泡、选择、插入、快速排序实战浅析
Hello,各位小伙伴大家好,我是小栈君,今天为大家带来的分享是关于go语言中的排序实战浅析. 我们就实际操作关于go的冒泡排序.选择排序.插入排序和快速排序四种方式的理论和实战进行分享,希望能够为大 ...
- 计算机硬件-CPU
计算机硬件-CPU 冯.诺依曼计算机体系 1.计算机硬件设备由存储器.运算器.控制器.输入设备和输出设备五部分 2.采取二进制形式和指令 3.将程序(数据和指令序列)预先存放在主存储器中,使计算机在工 ...
- c++ use curllib send REST API request to Web server
E.g and explaination: Pre-condition: Server is running and can reciever CURL command with json forma ...
- springboot+微信小程序实现微信支付【统一下单】
说明: 1)微信支付必须有营业执照才可以申请 2)微信支付官方api是全套的,我这是抽取其中的统一下单api,做了一个简单的封装 首先看看微信支付 商户系统和微信支付系统主要交互: 1.小程序内调用登 ...
- CodeForces-Round524 A~D
A. Petya and Origami time limit per test 1 second memory limit per test 256 megabytes input stan ...
- 【Koa】385- koa框架的快速入门与使用
点击上方"前端自习课"关注,学习起来~ 简介 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小. ...
- unittest自动化测试框架
目录 框架的概念 Unittest单元测试框架 常用的assert语句 unittest创建测试代码的方式: unittest构建测试套件(测试用例集合): unittest忽略测试用例: 运行测试集 ...
- 比SecureCRT更好用的工具MobaXterm下载安装使用教程
一.下载 1.官网下载:下载地址 下载左边的免费版本 2.百度网盘下载:下载地址 提取码:tbge java开发工具下载地址及安装教程大全,点这里. 更多深度技术文章,在这里. 二.安装 1.双击安 ...