JavaSE 多執行緒基本操作一

2021-08-19 08:42:43 字數 2627 閱讀 7714

在多執行緒操作中,有一些常用的方法可以直接供我們使用,這篇部落格主要總結一下這些基本操作。

1:執行緒的命名與取得

因為多執行緒的執行狀態我們無法確定,所以在對多執行緒的操作必須有乙個明確標識出線程物件的資訊,這個資訊往往通過名稱來描述。在thread類中,提供了一系列的相關方法。

方法名稱

型別描述

1public thread(runnable target, string name);

構造方法

在建立執行緒的同時設定名稱

2public final synchronized void setname(string name);

普通方法

設定執行緒名稱

3public final string getname();

普通方法

取得執行緒名字

如果我們想直接取得執行緒的物件,thread類中也提供了乙個相關方法

/**

* returns a reference to the currently executing thread object.

** @return the currently executing thread.

*/public static native thread currentthread();

currentthread()方法可以返回**段正在被哪個執行緒呼叫的資訊,下面我通過乙個示例進行說明。

我們可以發現,man方法被乙個名為main的執行緒所呼叫。我們現在再驗證一種情況  

另外,我們也可以注意到:主方法本來就是乙個執行緒,所有的執行緒都是通過主線程建立並啟動的。

關於執行緒的常用方法,大致可以用一張圖來描述

sleep()方法:

它的作用是在指定的毫秒數內讓當前正在執行的程序"休眠"(暫停執行)。這個正在執行的程序指的是this.currentthread()返回的執行緒物件。但是需要注意的是,sleep方法不會解鎖,所以說如果當前執行緒持有某個物件的鎖,即使呼叫了sleep方法,其他的執行緒也無法訪問這個物件。

public static native void sleep(long millis) throws interruptedexception;
關於這個方法的一些細節,我舉乙個例子來說明下

class my_thread extends thread

@override

public void run() catch (exception e)

system.out.println(thread.currentthread().getname()+" "+i);}}

}public class main

}

來看一下結果

我們可以看出來這三個執行緒是併發執行的,而且,還有一點需要注意,這三個執行緒不是同時休眠的

還有一種和sleep方法類似的方法

yield():執行緒讓步:該方法會放棄當前的cpu資源,將它讓給其他的任務去占用cpu執行時間,但是yield方法不能控制具體的交出cpu的時間,而且,它只能讓擁有相同優先順序的執行緒有獲取cpu執行時間的機會

另外,yield方法不會讓執行緒進入阻塞狀態,而是讓執行緒重回就緒狀態,它只需要等待重新獲取cpu執行時間,這一點和sleep方法是有區別的。

class my_thread extends thread

long end_time = system.currenttimemillis();

system.out.println("用時:"+(end_time - begin_tie)+"毫秒");

}}public class main

}

yield方法有乙個弊端:它會導致執行速度變慢,因為它會突然把cpu讓給其他資源,這樣會導致速度變慢。

去掉注釋後:

不去掉注釋:

這就很能說明問題了。

關於多執行緒的操作我分成幾個部分總結,先總結到這裡。

javaSE 多執行緒(守護執行緒)

我們一般使用多執行緒,都是while 的死迴圈,想要結束執行緒,只需退出死迴圈即可 當執行緒中呼叫了sleep 方法或者 wait 方法,當前的執行緒就會進入凍結狀態,這個執行緒就結束不了 呼叫thread 物件的interrupt 方法,可以強制解凍,此時 run 方法中需要捕獲到 interru...

javaSE 多執行緒之執行緒池

1 使用語法 publicstaticvoiduseexecutorservice executorservice shutdown 輸出 pool 1 thread 3 pool 1 thread 2 pool 1 thread 1 pool 1 thread 3 pool 1 thread 2 ...

多執行緒基本操作

1 繼承thread類建立執行緒 2 實現runnable介面建立執行緒 3 使用callable和future建立執行緒 1.實現callable介面,重寫call 方法,建立該實現類的例項 2.使用futuretask類來包裝callable物件,該futuretask物件封裝了callable...