1. 程式人生 > >java線程與並發編程實踐(一)

java線程與並發編程實踐(一)

tee start new read 它的 static ctrl+ als 函數

一、給出線程的定義

線程就是一條在程序代碼中獨立執行的路徑

二、給出runnable的定義

一個runnable就是一段封裝在對象中的代碼序列,它的類實現了runnable接口

三、Thread類和runnable接口完成了什麽?

類Thread提供了一個底層操作系統的線程架構的統一接口。Runnable接口為關聯了Thread對象的線程提供了執行代碼。

四、指出創建一個Runnable對象的兩種方式?

創建一個實現Runnable接口的匿名類或者lambda表達式

Runnable r = new Runnable() {                //匿名類,實現Runnable接口
			
			@Override
			public void run() {
				System.out.println("MyThread");
			}
		};


Runnable r = () -> System.out.println("MyThread");        //lambda表達式

五、指出關聯一個runnable到一個Thread對象的兩種方式?

a.把一個runnable對象傳入到Thread的構造器中

b.繼承Thread類重寫它的run()方法,因為Thread類也實現了runnbale接口

六、指出5種Thread的狀態

線程名稱、線程存活的標識、線程的執行狀態、線程的優先級、線程是否為守護線程

七、默認線程的名字會以Thd-作為前綴嗎?

不對,以Thread-作為前綴

八、如何給線程賦予非默認的名稱?

可以通過Thread的構造函數進行傳入,也可以調用setName()方法,指定名稱

九、如何確定線程是死是活?

使用isAlive()方法判斷

十、指出Thread.State枚舉的常量

NEW:該狀態下線程還沒有開始執行

RUNNABLE:該狀態下線程正在JVM中執行

BLOCKED:該狀態下線程被阻塞,正在等待一個監聽鎖

WAITING:該狀態下線程無限制的等待另外一個線程執行特定的操作

TERMINATED:該狀態下線程已經退出

十一、如何獲取當前線程的執行狀態

調用Thread.State或者調用getState()方法

十二、優先級的定義

優先級是指,線程的相對重要性

十三、如何通過setPriority()來影響應用程序跨操作系統的可移植性?

使用setPriority()會影響應用程序在操作系統之間的可移植性,因為不同的調度器會采用不同的方式來處理優先級

十四、確定Thread的void setPriority(int priority)參數的取值範圍

介於Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之間

十五、當應用程序的最後一個非守護線程死亡之後,守護線程也會自動死亡以使得應用程序退出

正確

十六、在一個正在運行或者已經死亡的Thread對象上調用Thread的void start()方法會發生什麽?

會拋出java.lang.IllegalThreadStateException

十七、如何終止windows上一個無法停止的程序

ctrl+c

十八、組成Thread中斷機制的所有方法

interrupt()

interrupted()

isInterrupted()

十九、isInterrupted()方法清除了線程的中斷狀態

錯誤,不影響

二十、當線程中斷時,該線程如何反映?

拋出InterruptedException

二十一、給出忙循環的定義

設計來消耗時間的一條循環語句

二十二、指出讓一條線程等待另一個線程直至死亡的方法

join()

二十三、指出讓一條線程睡眠的Thread方法

sleep()

二十四、編寫一個名為IntSleep的應用程序,其創建一條後臺線程,不斷地打印出Hello,之後睡眠100ms。在睡眠了2s之後,默認主線程應該中斷後臺線程,此線程在打印出interrupted之後跳出循環

public class IntSleep {

	public static void main(String[] args) {
		Runnable r = new Runnable() {
			@Override
			public void run() {
				while(true) {
					System.out.println("Hello");
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						System.out.println("Interrupted");
						break;
					}
				}
			}
		};
		Thread t = new Thread(r);
		t.start();
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
		}
		t.interrupt();
	}
}


java線程與並發編程實踐(一)