java线程调度(优先级,休眠,让步,等待)

处于生命周期的线程,通过调度实现各种状态下的转换。线程的调度是使用各种线程调度方法,如setPriority(),sleep(),yield(),join()等,对线程进行不同的操作。对于各种线程调度的方法,下面分别进行介绍。
1.线程优先级
线程的优先级是指线程被系统调度执行时的优先执行级别。在多线程程序中,往往是多个线程同时等待执行,但是每个线程的重要性是不一样的,在同等的情况下,有些重要的线程优先执行。在java中通过调用setPtiority()方法为线程设置优先级。
下面来个例子

class MyThread extends Thread{
public void run(){
	for(int i=0;i<10;i++)
	{
		System.out.println(i);
		yield();
	}
   }
 }

public class Test30 {
public static void main(String args[]){
	MyThread t1=new MyThread();
	MyThread t2=new MyThread();
	t1.setPriority(1);
	t2.setPriority(10);
	t1.start();
	t2.start();
}

}

优先级用0~10数字表示,数字越大,优先级越高。t2的优先级比t1高,实际效果是执行t2线程。
2.线程让步yield()
对于正在执行的线程,可以调动yield()方法让他们重新排队,将CPU让给排在后面的线程,此线程装换为就绪状态。*注意yield()方法只让步给高优先级(上述程序)或同等优先级的线程,如果是底优先级线程,则继续执行此线程,此方法没有参数,也没有声明任何异常。*下面上例子

   class MyThread extends Thread{
	public void run(){
	for(int i=0;i<10;i++)
	{
		System.out.println(i);
		yield();
	}
	}
} 
public class Test30 {

public static void main(String args[]){
	
	MyThread t1=new MyThread();
	MyThread t2=new MyThread();

	t1.start();
	t2.start();
}

}

每次迭代都要执行让步,所以t1和t2将会交替 打印0~9数字
3.线程等待jion()
说的简单点就是让t1线程执行完,再执行t2.来上列子。

class MyThread extends Thread{
public void run(){
	for(int i=0;i<10;i++)
	{
		System.out.println(i);
	}
}
}
public class Test30 {
public static void main(String args[]) throws InterruptedException{
	MyThread t1=new MyThread();
	MyThread t2=new MyThread();
	t1.start();
	t1.join();
	t2.start();

    }
 }

执行结果是0
0123456789 //t1
0123456789 //t2
4.线程的休眠sleep()
再执行的线程中,调用sleep()方法让线程放弃CPU进行休眠,此线程装换阻塞状态。说的简单点,可以指定休眠时间每隔一定的时间打印0~9数字。下面以每隔1秒为例,注意单位是毫秒。

class MyThread2 extends Thread{
public void run(){
	for(int i=0;i<10;i++){
		System.out.println(i);
		try{
			sleep(1000);
		}
		catch(InterruptedException e){
			e.printStackTrace();
		}
	}
}
}

public class Test32 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	MyThread2 t=new MyThread2();
	t.start();
}

 }
发布了15 篇原创文章 · 获赞 4 · 访问量 348

猜你喜欢

转载自blog.csdn.net/falaoxx/article/details/104342075