多线程的优先级与休眠

本文介绍了Java中多线程的优先级概念,包括如何使用1到10的整数或Thread类的静态常量设置线程优先级,并解释了主线程的默认优先级。此外,还讲解了Thread的setPriority方法以及如何通过sleep方法控制线程暂停,强调了sleep方法可能抛出InterruptedException并提供了使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一)多线程的优先级

  在应用程序中,如果要对线程进行调度,最直接的方式就是设置线程的优先级。优先级越高的程序获得CPU执行的机会越大,线程的优先级用1~10之间的整数来表示,优先级依次递增。除了可以使用数字表示线程的优先级,还可以使用Thread类提供的三个静态常量来表示线程的优先级(你在逗我......还不如直接用数字呢....)

   Thread类的静态常量                     功 能 描 述

       static int MAX_PRIORITY                线程优先级为10

        static int MIN_PRIORITY                线程优先级为1

        static int NORM_PRIORITY            线程优先级为5

    

    程序在运行期,处于就绪状态的每个线程都有自己的优先级,main线程具有普通的优先级(5)。

   线程的优先级可以通过Thread类的setPriority(int newPriority)方法对其进行性设置,参数newPriority接收的是1~10之间的整数或者那三个静态常量

   下面通过一个案例来演示不同的优先级的两个线程在程序中的运行情况

   

package 线程的优先级;
class MaxPriority implements Runnable{
	public void run(){
		for(int i = 0 ;i < 10; i++){
			System.out.println(Thread.currentThread().getName()+"正在输入:"+i);
		}
			
	}
}
class MinPriority implements Runnable{
	public void run(){
		for(int i = 0 ;i < 10; i++){
			System.out.println(Thread.currentThread().getName()+"正在输入:"+i);
		}
	}
}
public class 线程的优先级 {
   public static void main(String[] args) {
	Thread t1 = new Thread(new MaxPriority(),"优先级别较高的线程");
	Thread t2 = new Thread(new MinPriority(),"优先级别较低的线程");
	t1.setPriority(Thread.MAX_PRIORITY);      //用Thread类的setPriority方法来设置优先级,将t1设置为10,t2设置为1;
	t2.setPriority(Thread.MIN_PRIORITY);
	t1.start();
	t2.start();
	
}
}

2)线程的休眠

    如果希望人为的控制线程,将正在执行的线程暂停一段时间,可以使用sleep(long millis)方法进行设置,不过该方法声明抛出InterruptedException异常,因此在调用时该捕获异常(tyr  catch)或者声明抛出异常(throw)

    接下来就演示一下sleep(long millis)方法在程序中的应用

   

package 线程睡眠;

public class 线程睡眠 {
public static void main(String[] args)throws Exception {  
	new Thread(new SleepThread()).start();
	for(int i = 1; i < 11; i++){
		if(i == 5){
			Thread.sleep(2000);   //睡眠2秒
		}
		System.out.println("主线程正在输出:"+i);
		Thread.sleep(500);   //睡眠500毫秒
	}
}
}
class SleepThread implements Runnable{
	public void run(){
		for(int i = 1 ; i < 11; i++){
			if(i == 3){
			try{
					Thread.sleep(2000);  //睡眠2秒
				}catch(InterruptedException e){
					e.printStackTrace();
				}
			}
			System.out.println("线程一正在输出:"+i);
			try{
				Thread.sleep(500); //睡眠500毫秒
			}catch(Exception e){
				e.printStackTrace();
			}
		}
			
	}
}

/**主线程正在输出:1
线程一正在输出:1
主线程正在输出:2
线程一正在输出:2
主线程正在输出:3     线程一在等于3的时候休眠两秒,主线程因为有sleep(500),所以主线程在线程一休眠的这
主线程正在输出:4     段时间内只能输出2个数
线程一正在输出:3
线程一正在输出:4
主线程正在输出:5
线程一正在输出:5
主线程正在输出:6
线程一正在输出:6
主线程正在输出:7
线程一正在输出:7
主线程正在输出:8
线程一正在输出:8
主线程正在输出:9
线程一正在输出:9
主线程正在输出:10
线程一正在输出:10
**/

未完待续.......

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值