07_控制线程_join_线程插队
【join线程简述】
join()方法:Thread提供的让一个线程去等待另一个线程完成。当在某个程序执行流中(如main线程)调用其它线程(如t2线程)的join方法(t2.join()),调用线程(main线程)将被阻塞,直到被join()方法加入的join线程(t2.start())执行完成为止。
【示例代码】
package com.Higgin.part02;
class JoinThread implements Runnable{
//重写run方法,定义线程执行体
public void run(){
for(int i=;i<;i++){
System.out.println(Thread.currentThread().getName()+"===="+i);
}
}
}
public class Demo01 {
public static void main(String[] args) throws InterruptedException {
JoinThread jt=new JoinThread();
Thread t1=new Thread(jt,"Higgin");
Thread t2=new Thread(jt,"被join的线程");
t1.start(); //启动t1线程
//下面属于main主线程
for(int i=;i<;i++){
if(i==){
t2.start(); //启动t2线程
//main线程调用了t2线程的join方法,导致main线程必须等待t2执行结束才可以向下执行
t2.join();
}
System.out.println(Thread.currentThread().getName()+"===="+i);
}
}
}
【运行结果】
一开始,main线程启动了名为"Higgin"的t1线程,此时总共两个线程并发执行,分别是main主线程和Higgin线程,
后来在main主线程中的for循环中,当i==20时候,又启动了t2线程,并且调用了t2线程的join的方法,直接导致main线程阻塞。


因为main线程已经阻塞,所以接下来是"Higgin"和"被join的线程"两者抢占运行,如果"被join的线程"运行结束,main线程进入就绪状态,然后抢占运行,如Higgin线程没结束的话。

【补充】
join()方法有三种重载形式;
1. join() :即等待被join()的线程执行完成
2. join(long millis):等待被join()的线程的最长时间为millis毫秒,如果时间到了,被join的线程仍未执行结束,那么就不等了。
3. join(long millis,int nanos):增加了一个纳秒,等待被join()的线程的最长时间为millis毫秒和nanos纳秒(很少用,一般精确到毫秒就行)
07_控制线程_join_线程插队的更多相关文章
- 使用 CountDownLatch 控制多个线程执行顺序
已同步更新至:http://dxjia.cn/2015/08/countdownlatch-use/ 有时候会有这样的需求,多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工 ...
- 第40天学习打卡(静态代理 Lambda表达式 线程状态 线程同步 同步方法)
静态代理 package com.kuang.demo03; //静态代理模式总结 //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 //好处: //代理对象可以做很多真实对象 ...
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...
- 第21章 java线程(1)-线程初步
java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...
- Java线程:线程的同步-同步方法
Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段. 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问 ...
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- Java线程:线程状态的转换
Java线程:线程状态的转换 一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下: 1.新状态:线程对象已 ...
- 基础学习day12--多线程一线程之间的通信和常用方法
一.线程之间的通信 1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信. 等待/唤醒机制涉及的方法: 1. wait():让线程处于冻结状态,被wa ...
- 基础学习day11--多线程一线程的创建,运行,同步和锁
一.线程基本概述 1.1.进程和线程 进程:一个应用程序一般都是一个进程,正在进行的程序 每一个进程最少都有一个线程,都有一个执行顺序,该顺序是一个执行路径或者一个控制单元 线程:进程中一个独立的控制 ...
随机推荐
- PHP魔术变量总结
php手册里面的解释 __FUNCTION__ returns only the name of the function 返回的仅仅是函数的名称 __METHOD__ returns t ...
- 文件控制列表命令setfacl和getfacl的使用
一 需求 有以下需求,通过setfacl命令实现 一组用户可写可读可执行,一组用户可写可执行,另一组用户只可读 linux rwx oracle wx uplook r 二 解决 第一步 添加六个用户 ...
- Project Management - 3) Manage Your Meetings
1. 取消没有价值的会议 会议是有代价和成本的 不要举行顺序式的多人进度报告会议 eg: 这周做了什么,下周还要做什么? 除了发言人和项目经理外,每个人都会觉得无聊. 这种会议是在拖项目的后腿,赶紧停 ...
- nonce和timestamp在Http安全协议中的作用
前段时间给客户网站做新浪微博账号登录功能,对OAuth协议以及相关的一些安全协议做了一些研究,顺便就记录一下学习心得吧.在这里就不打算具体讲OAuth的协议流程了,而是针对OAuth请求头里的nonc ...
- SHGetSpecialFolderLocation
uses shlobj;function GetDesktopFolder():string;var pItem: PItemIDList; temp: array[0..MAX_PATH] of ...
- android学习日记03--常用控件ListView
常用控件 8.ListView 列表视图,比如游戏的排行榜.列表数据可以根据屏幕大小自适应 列表的显示需要三个元素: a.ListVeiw:用来展示列表的View. b.适配器:用来把数据映射到Lis ...
- 进程环境之C程序的存储空间布局
从历史上讲,C程序一直由下面几部分组成: 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器.C编译器和shell等)在存储器中也只需有一个副本,另 ...
- Controllers
Controllers Controllers are the bread and butter of the framework they control when a model is used ...
- java常用的包的简介
java常用的包: java.lang:包含java语言的核心类,如String.math.system和thread类等,使用这个包下的类无需import导入,系统会自动导入这个包下的所有类. ...
- 马上学Android开发在线视频教程全集
马上学Android开发视频教程全集 马上学Android开发[马上学Android]安卓开发视频教程 001 Androi 马上学Android开发[马上学Android]安卓开发视频教程 002 ...