public class Demo {

    /**
* Thread类的join()方法
* --------------------------------
* 1)join()
* 2)join(long millis)
* 3)join(long millis, int nanos)
* 用法见代码中注释,可通过调整睡眠时间一一验证。
*/
public static void main(String[] args) { // 创建一个线程组
ThreadGroup threadGroup = new ThreadGroup("ThreadGroup1"); // 在该线程组下创建一个线程t1
Thread t1 = new Thread(threadGroup, new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000); // 3秒后执行
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread1 end ...");
}
}, "Thread1"); // 在该线程组下创建一个线程t2
Thread t2 = new Thread(threadGroup, new Runnable() {
@Override
public void run() {
try {
/*
* t1.join();
* ----------------------------
* 等同于 t1.join(0); t1执行结束后执行t2.
*/
t1.join(); /*
* t1.join(1000);
* ----------------------------
* 等最多1s直至t1死亡。
* |- 如果1s内t1没死,t1执行1s后开始执行t2;
* |- 如果1s内t1死了,不用等满1s直接开始执行t2;
*/
// t1.join(1000); /*
* t1.join(1000, 1000);
* -----------------------------------------
* 类似t1.join(1000);
* 第一个1000,单位是毫秒,第二个1000单位是纳秒 .
* |- 如果第一个参数不是1000,而是0,效果等同 t1.join(0 + 1);
* |- 如果第二个参数大于50万,效果等同 t1.join(1000 + 1);
* |- 如果第一个参数不为0,第二个参数小于50万,效果等同 t1.join(1000);
* 有点延时执行的意思。但是延时的时间只能是0毫秒或1毫秒。
*/
// t1.join(1000, 1000); Thread.sleep(1000); // 1s后执行
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread2 end ...");
}
}, "Thread2"); // 启动线程
t1.start();
t2.start();
}
}

Thread类的join()方法的更多相关文章

  1. 多线程:Thread类的Join()方法

    多线程:Thread类的Join()方法 http://blog.163.com/hc_ranxu/blog/static/3672318220095284513678/ 当我们在线程B中调用Thre ...

  2. C#中Thread类中Join方法的理解(转载)

    指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行      比如 using System; namespace TestThreadJoin { class Pro ...

  3. Java中Thread类的join方法到底是如何实现等待

    现在的场景是A线程执行:public void run(){ bThread.join(0);//把b线程加入到当前线程(a线程),等待b结束,当前a线程才会结束.}B线程执行public void ...

  4. 【java基础】Thread类之join方法

  5. python语言中threading.Thread类的使用方法

    1. 编程语言里面的任务和线程是很重要的一个功能.在python里面,线程的创建有两种方式,其一使用Thread类创建 # 导入Python标准库中的Thread模块 from threading i ...

  6. python 全栈开发,Day42(Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures)

    昨日内容回顾 线程什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位 进程和线程是什么关系? 线程是在进程中的 一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的在当 ...

  7. python全栈开发,Day42(Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures)

    昨日内容回顾 线程 什么是线程? 线程是cpu调度的最小单位 进程是资源分配的最小单位 进程和线程是什么关系? 线程是在进程中的一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的 ...

  8. 多线程学习笔记(四)---- Thread类的其他方法介绍

    一.wait和 sleep的区别 wait可以指定时间也可以不指定时间,而sleep必须指定时间: 在同步中时,对cpu的执行权和锁的处理不同: wait:释放执行权,释放锁:释放锁是为了别人noti ...

  9. Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 线程的sleep()方法和yield()方法有什么区别?

    Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间 ...

随机推荐

  1. day6常用模块,数据库操作

    一.循环调用函数    map() 二.列表推导式和生成器 三.filter过滤器 四.os模块 五.datetime模块 六.random模块 七.写日志,导入nnlog模块 八,发邮件 九,操作数 ...

  2. linux命令之kill篇

    作业四:查询firewall进程,然后杀死 [root@localhost 桌面]# ps -aux |grep firewall root        772  0.0  2.0 327912 2 ...

  3. 2、html补充

    今天补充几个html标签 <body>内常用标签 1.<div>和<span> <div></div> : <div>只是一个块 ...

  4. ORACLE数据恢复方法(提交事务也可以)

    今天在操作数据库的时候,发现数据操作错误,想要恢复,但是没有用事务,按理说,设置成不默认提交事务,此时所做的各种操作都没有反应到数据库中.这时,你可以rollback事务,撤销所有未提交的修改.不过, ...

  5. xhprof 运行结果名词解释

    Overall Summary Inclusive Time (或子树时间):包括子函数所有执行时间. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间. ...

  6. C# IOThread

    在看微软的ASP.NET - 将 ASP.NET 用作高性能文件下载器 示例里面用到了IO 线程,以前打算自己撸的,这里贴出来 已标记一下: ///////////////////////////// ...

  7. 毕业论文Word格式技巧

    word利用多级列表功能实现章节标题自动编号 坑:在选择级别1后,直接在当前对话框直接继续设置级别2:然后选中级别2,设置相应的格式,主要在将级别链接到样式处选择为标题2,然后要在库中显示的级别选择级 ...

  8. CSS实现16:9等比例盒子

    问题:图片的宽度100%,高度要始终自适应为16:9. 解决方案: 1.通过js程序算出绝对高度再进行设置.这是解决问题最容易想到的方法. 2.但是,我们的原则是能用css实现的功能尽量用css,这有 ...

  9. javascript日期时间操作库推荐

    https://github.com/datejs/Datejs 链接: https://pan.baidu.com/s/1QTGhxslarNyW_0kB6gyJYA 提取码: ibab 如果这篇文 ...

  10. Oracle 之 树查询 START WITH ... CONNECT BY ...子句

    START WITH ... CONNECT BY ...子句是结构化查询中用到的,其基本语法是: select … from tablename start with 条件1 connect by ...