1. 程式人生 > 程式設計 >Java sleep方法及中斷方式、yield方法程式碼例項

Java sleep方法及中斷方式、yield方法程式碼例項

一、多執行緒的sleep方法

1.Thread.sleep(毫秒)

2.sleep方法是一個靜態方法

3.該方法的作用:阻塞當前執行緒,騰出CPU,讓給其他執行緒

4.sleep的異常注意事項,以及中斷休眠的一種方式及其注意點

package com.bjpowernode.java_learning;
public class D106_1_ {
	public static void main(String[] args) throws InterruptedException{
		Processer106 p1 = new Processer106();
		p1.start();
		//需求:子執行緒啟動後0.5s之後打斷它的休眠
		Thread.sleep(500);
		p1.interrupt();
		//這樣就會是子執行緒打斷休眠
		//這個底層的實現方法是一個呼叫中斷異常的方式,因此,這個休眠之後的操作就不會執行了
		//在這個程式碼中就會直接進行下一次迴圈
		for (int i=0;i<5;i++) {
			System.out.println(Thread.currentThread().getName()+"---->"+i);
			//下面這個語句也可以使用物件.sleep();因為sleep方法是一個靜態方法。
			//即p1.sleep(200);這個main執行緒也會休眠200ms
			Thread.sleep(200);
		}
	}
}
class Processer106 extends Thread{
	//Thread中的run方法不丟擲異常,因此重寫run方法,在run方法的宣告位置不能使用throws
	//所以run方法中只能使用try...catch.....
	public void run() {
		for (int i=0;i<5;i++) {
			System.out.println(Thread.currentThread().getName()+"--->"+i);
			try {
				Thread.sleep(1000);
				//當前執行緒阻塞1s
				System.out.println(i);
			}
			catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	//m1方法是可以使用throws的
}

Java sleep方法及中斷方式、yield方法程式碼例項

二、如何正確的停止一個執行緒(不使用interrupt方法)

使用一個flag就可以達到我們的目的

packagepackage com.bjpowernode.java_learning;
public class D106_2_InterruptSleep {
	public static void main(String[] args) throws Exception{
		Processer106_2 p = new Processer106_2();
		Thread t = new Thread(p);
		t.setName("t");
		t.start();
		//5s之後終止
		Thread.sleep(5000);
		p.run1 = false;
		//這種非異常的方法更好,因為不會丟擲異常。
	}
}
class Processer106_2 implements Runnable{
	Boolean run1 = true;
	public void run() {
		for (int i=0;i<10;i++) {
			if(run1) {
				try {
					Thread.sleep(1000);
				}
				catch(InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName()+"-->"+i);
			} else {
				return;
			}
		}
	}
}

Java sleep方法及中斷方式、yield方法程式碼例項

三、Thread.yield

1.該方法是一個靜態方法

2.作用:給同一個優先順序的執行緒讓位,但是讓位時間不固定

3.和sleep方法相同,就是yield時間不固定

package com.bjpowernode.java_learning;
public class D106_3_ThreadYield {
	public static void main(String[] args) throws InterruptedException {
		Processer106_3 p = new Processer106_3();
		Thread t = new Thread(p);
		t.setName("t");
		t.start();
		//在主執行緒中
		for (int i=0;i<1000;i++) {
			System.out.println(Thread.currentThread().getName()+"-->"+i);
		}
	}
}
class Processer106_3 implements Runnable{
	public void run() {
		for (int i=0;i<1000;i++) {
			System.out.println(Thread.currentThread().getName()+"-->"+i);
			if(i%20 == 0) {
				Thread.yield();
			}
		}
	}
}

Java sleep方法及中斷方式、yield方法程式碼例項

Java sleep方法及中斷方式、yield方法程式碼例項

四、原始碼:

D106_1_SleepMehthodAnalysis.java

D106_2_InterruptSleep.java

D106_3_ThreadYield.java

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。