java线程join的意思(转自http://zjj1211.blog_51cto_com)
Join,单词本事就是连接的意思。
先贴出几段代码猜猜结果。
<1> public static int Main()
{
Alpha oAlpha = new Alpha(); Thread Thread1 = new Thread(delegate() {
Console.WriteLine("A");
});
Thread1.Start();
Console.WriteLine("a");
return 0;
}
结果是先打印 A 还先打印 a ?
<2> public static int Main()
{
Alpha oAlpha = new Alpha(); Thread Thread1 = new Thread(delegate() {
Console.WriteLine("A");
});
Thread1.Start();
Thread1.Join();//注意这里
Console.WriteLine("a");
return 0;
}
结果是先打印 A 还先打印 a ?
------------------------------------------------------
<3>
static void Main(string[] args)
{
//线程A
Thread ThreadA = new Thread(delegate()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("A : " );
if (i == 9)
{
break;
}
Thread.Sleep(1000);
} });
//线程B
Thread ThreadB = new Thread(delegate()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("B : ");
if (i == 4)
{
break;
}
Thread.Sleep(1000);
}
ThreadA.Join();//在这里插入线程A
for (int i = 0; i < 5; i++)
{
Console.WriteLine("C : " );
if (i == 4)
{
break;
}
Thread.Sleep(1000);
}
});
ThreadA.Start();
ThreadB.Start();
}
<4>
public static int Main()
{
Thread.CurrentThread.Join();
Console.WriteLine("O(∩_∩)O哈哈");
return 0;
}
----------------------------------------------------
运行结果:
1 A 和 a不分先后,Thread1线程很简单启动耗时非常小,Thread1线程和主线程几乎是同步的,所以打印A a不分前后根据CPU当时运行环境决定。
2 先打印A 再打印 a ,因为Thread1执行了Join(),相当于在主线程中添加了Thread1线程,就是说只有当Thread1执行结束之后主线程才能继续执行。换句话说在主线程中嵌了一段代码,只有这段代码执行结束(这里不要以为调用了Join()线程Thread1会从头开始执行,不明白这句话可以运行下第3端程序),主线程才可以继续执行后面的代码。
3 前5秒 A B交替出现,然后A出现5次,C出现5次。
如果注释掉ThreadA.Join(),那么结果是前5秒AB 交替出现 后5秒AC交替出现。
这里我就不再罗嗦了。还是那样线程B中join了线程A只有A执行结束,才可以继续执行线程B中剩下的代码。
join其实就是使异步执行线程转为同步执行。
4 主线程被终止
java线程join的意思(转自http://zjj1211.blog_51cto_com)的更多相关文章
- java线程join方法使用方法简介
本博客简介介绍一下java线程的join方法,join方法是实现线程同步,可以将原本并行执行的多线程方法变成串行执行的 如图所示代码,是并行执行的 public class ThreadTest { ...
- Java - 线程Join与interrupt
Java多线程系列--“基础篇”08之 join() 概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_ ...
- [java] java 线程join方法详解
join方法的作用是使所属线程对象正常执行run方法,而对当前线程无限期阻塞,直到所属线程销毁后再执行当前线程的逻辑. 一.先看普通的无join方法NoJoin.java public class N ...
- java 线程 join(wait) 后,是如何唤醒
概要:锁是线程,锁对象执行完毕后,会调用自身对象上的notify(); Join 方法:本质上还是根据wait方法实现的.分析join源码发现join方法本身是使用了synchronized修饰符的. ...
- JAVA 线程Join
join方法: 当某个线程要等待另一个线程执行结束后才能继续执行时,使用join方法. public class DinnerThread { public static void main(Stri ...
- Java线程中yield与join方法的区别
长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...
- Java线程状态及 wait、sleep、join、interrupt、yield等的区别
Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到 被中断.被拥有该对象锁的线程唤醒(notify或not ...
- java 线程方法join的简单总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...
- java线程方法join的总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...
随机推荐
- c# string.Format用法总结
文章出处:http://www.cnblogs.com/7788/archive/2009/05/13/1455920.html 先举几个简单的应用案例: 1.格式化货币(跟系统的环境有关,中文系统默 ...
- poj 2425 A Chess Game 博弈论
思路:SG函数应用!! 代码如下: #include<iostream> #include<cstdio> #include<cmath> #include< ...
- C 和C++ 名称修饰规则
C名称修饰规则 1.对于使用__cdecl调用约定的函数,在函数名称前加一下划线,不考虑参数和返回值. 2.对于使用__fastcall调用约定的函数,在函数名称前后各加一@符号,后跟参数的长度,不考 ...
- 03 - Oracle文件概述
构成Oracle数据库的8种文件类型. 可以把这些文件分成以下几类. Instance相关 参数文件 parameter, initOra file, spfile 跟踪文件 trace file 警 ...
- VS2013试用期结束后如何激活
在激活框中输入密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9
- B. Quasi Binary
开启博客园 记录codeforces程序 这个题目很简单 一个数能被最少的只包含0 ,1的数字和 如:9 = 1+1+1+1+1+1+1+1+1 10 =10 12 =11+ 1 求得是最少个数的整数 ...
- c# 委托 和 事件
当初学C#的时候,没有完全吃透的,只能现在继续了... 欠老账.... http://www.cnblogs.com/chengxingliang/archive/2013/05/21/305191 ...
- No ResultSet was produced
遇到的详细问题: 出现了No ResultSet was produced的异常,但数据是成功插入, 大致判断异常发生在执行插入操作后,检查代码. 解决方案: 通常在executeQuery(sql) ...
- ArchLinux安装与配置小结
最近无意间发现一个基于ArchLinux的发行版--BlackArch,主题十分炫酷(中二).当然渗透类的Linux 发行版已经有BackTrack和Kali了,不过都是源于Debian的,使用者众多 ...
- iOS 开发--添加工程
文/Bison(简书作者)原文链接:http://www.jianshu.com/p/dd71e15df5d0著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 第一部分,配置项目 在此只 ...