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);
	}
}

运行结果:

  1. 礼让不成功
    在这里插入图片描述
  2. 礼让成功
    在这里插入图片描述

三、线程强制执行join()

join()

  • join合并线程,待此线程执行完成后,再执行其他线程
  • 该线程执行过程中,其他线程处于阻塞状态(阻塞就是代码不往下执行,阻塞解除后,进入就绪状态,等待CPU调度)
  • 线程A中使用join(),A阻塞,B执行;B执行结束后,A由阻塞变为就绪状态,等待CPU重新调度
    在这里插入图片描述

以上是关于Java多线程学习笔记— “Thread类三个方法:线程休眠sleep()线程礼让yield()线程强制执行join()”的主要内容,如果未能解决你的问题,请参考以下文章

Java 多线程 - 学习笔记

java多线程/并发学习笔记

java学习笔记 --- 多线程(多线程的控制)

Java多线程编程(学习笔记)

Java学习笔记—多线程

Java多线程学习笔记