我是靠谱客的博主 贪玩帅哥,最近开发中收集的这篇文章主要介绍Java基础(线程休眠sleep、礼让yield、合并线程Join、线程的状态、线程优先级),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • sleep(时间)指定当前线程阻塞的毫秒数;(1000=1秒)
  • sleep存在异常InterruptedException;
  • sleep时间达到后线程进入就绪状态(放大问题的发生性);
  • sleep可以模拟网络延时,倒计时等;
  • 每个对象都有一个锁,sleep不会释放锁;

yield(礼让)

  • 礼让线程,让当前正在执行的线程暂停,但不阻塞。

  • 将线程从运行状态转为就绪状态。

  • 让cpu重新调度,礼让不一定成功!看CPU心情。

  • 白话解释:就比如现在有一个线程A和线程B需要执行,经过CPU调度A先执行,但是A想礼让给B,A就出来了。出来之后并不是B立马执行,而是AB又在同一个地方等待CPU调度,有可能还是A执行。

public class TestYield{
	public void static main(String[] args){
		MyYield myYield = new MyYield();
		new Thread(myYield,"A").start();
		new Thread(myYield,"B").start();
	}

}

class MyYield implements Runnable{
	
	public void run(){
	System.out.println(Thread.currentThread().getName()+"线程开始执行");
	Thread.yield();//礼让。
	System.out.println(Thread.currentThread().getName()+"线程开停止执行。");
	}	
}

Join

  • Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞
  • 可以想象成插队
//测试join,插队
public class TestJoin implements Runnable{

public void run(){
	for(int i = 0;i < 100;i++){
	 System.out.println("线程vip来了!"+i);
	}
}
public static void main(String[] args) throw Exception {
	//启动线程
	TestJoin testJoin = new TesstJoin();
	new Thread(testJoin).start();
	//主线程
	for(int i = 0;i < 1000;i++){
		if(i == 200){
			thread.join;//插队
		}
		System.out.println("main"+i)
	}
}

}

线程状态

在这里插入图片描述


线程优先级

  • Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。
  • 线程的优先级用数字表示,范围从1~10。
    Thread.MIN_PRIORITY = 1;
    Thread.MAX_PRIORITY = 10;
    Thread.NORM_PRIORITY = 5;
  • 使用以下方式改变或获取优先级;
    getPriority().setPriority(int xxx)
  • 优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了,这都是看CPU调度。
public class TestPriority{
	public static void main(String[] args){
		//主线程默认优先级5
		System.out.println(Thread.currentThreadd().getName()+"--->"+Thread.currentThreadd().getPriority());
	MyPriority myPriority =	new MyPriority();
	Thread t1 = new Thread(myPriority);
	Thread t2 = new Thread(myPriority);
	Thread t3 = new Thread(myPriority);
	Thread t4 = new Thread(myPriority);
	Thread t5 = new Thread(myPriority);
	Thread t6 = new Thread(myPriority);
	
	//先设置优先级,再启动
	t1.start();
	t2.setPriority(1);
	t2.start();
	t3.setPriority(4);
	t3.start();
	t4.setPriority(Thread.MAX_PRIORITY);//10
	t4.start();
	t5.setPriority(-1);//错
	t5.start();
	t6.setPriority(11);//错
	t6.start();
	}

}
class MyPriority implements Runnable{
	public void run(){
		System.out.println(Thread.currentThreadd().getName()+"--->"+Thread.currentThreadd().getPriority());
	}
}

最后

以上就是贪玩帅哥为你收集整理的Java基础(线程休眠sleep、礼让yield、合并线程Join、线程的状态、线程优先级)的全部内容,希望文章能够帮你解决Java基础(线程休眠sleep、礼让yield、合并线程Join、线程的状态、线程优先级)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部