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());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值