Java多线程学习笔记— “Thread类三个方法:线程休眠sleep()线程礼让yield()线程强制执行join()”
Posted 一切因为是码农
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程学习笔记— “Thread类三个方法:线程休眠sleep()线程礼让yield()线程强制执行join()”相关的知识,希望对你有一定的参考价值。
一、线程休眠sleep()
sleep()
- 每个对象都有一把锁,sleep方法不会释放锁
- sleep()方法的参数为需要睡眠的时间,单位:
毫秒
- sleep方法存在异常InterruptedException
- sleep在到达时间后线程进入就绪状态
- sleep可以模拟网络延时,倒计时等
二、线程礼让yield()
yield()
- 礼让线程,让当前正在执行的线程暂停,但不阻塞
- 直接让线程从运行状态转为就绪状态
- 让CPU重新调度,礼让不一定成功,看CPU心情
package book_practice;
public class TestYield {
public static void main(String[] args) {
Myyield m1 = new Myyield("线程1");
Myyield m2 = new Myyield("线程2");
m1.start();
m2.start();
}
}
class Myyield extends Thread{
public void run() {
System.out.println(Thread.currentThread().getName()+"-> start");
//线程礼让
this.yield();
System.out.println(Thread.currentThread().getName()+"-> end");
}
public Myyield(String name) {
// TODO 自动生成的构造函数存根
super(name);
}
}
运行结果:
- 礼让不成功
- 礼让成功
三、线程强制执行join()
join()
- join合并线程,待此线程执行完成后,再执行其他线程
- 该线程执行过程中,其他线程处于阻塞状态
(阻塞就是代码不往下执行,阻塞解除后,进入就绪状态,等待CPU调度)
- 线程A中使用join(),A阻塞,B执行;B执行结束后,A由阻塞变为就绪状态,等待CPU重新调度
以上是关于Java多线程学习笔记— “Thread类三个方法:线程休眠sleep()线程礼让yield()线程强制执行join()”的主要内容,如果未能解决你的问题,请参考以下文章