Java 多執行緒

2021-07-02 18:45:47 字數 2258 閱讀 5770

一、執行緒概念:

1.執行緒:程式中單獨順序的控制流

執行緒本身依靠程式進行執行

執行緒是程式中的順序控制流,只能使用分配給程式的資源和環境

2.程序:執行中的程式

乙個程序可以包含乙個或多個執行緒

乙個程序至少要包含乙個執行緒

3.單執行緒:程式中只存在乙個執行緒,實際上主方法就是乙個主線程

4.多執行緒:多執行緒是乙個程式中執行多個任務

多執行緒的目的是更好的使用cpu資源

二、執行緒的狀態:

建立狀態:準備好了乙個多執行緒的物件;

就緒狀態:呼叫了start()方法,等待cpu排程;

執行狀態:執行run()方法;

阻塞狀態:暫時停止執行,可能將資源交給其他執行緒使用;

終止狀態(死亡狀態):執行緒銷毀;

三、執行緒常用方法:

1.取得執行緒名稱getname()

2.取得當前執行緒物件currentthread()

3.判斷執行緒是否啟動isalive()

4.執行緒的強行執行join()

5.執行緒的休眠sleep()

6.執行緒的禮讓yield()

四、執行緒的同步與死鎖:

1.同步**塊

在**塊上加上"synchronized"關鍵字,則此**塊就稱為同步**塊

2.同步**塊格式

synchronized(同步物件)

3.同步方法

除了**塊可以同步,方法也可以同步的

4.方法同步格式

synchronized void 方法名稱(){}

執行緒的同步經典示例:

模擬某車站有三個視窗同時賣票,總票數為10張,賣完為止,**如下:

//賣票執行緒

class mythread implements runnable catch (exception e)

system.out.println("剩餘票數:" + --ticket);

} else

} }}public class test001

}

程式執行結果如下:

視窗一賣掉一張票...

剩餘票數:9

視窗三賣掉一張票...

剩餘票數:8

視窗二賣掉一張票...

剩餘票數:7

視窗一賣掉一張票...

剩餘票數:6

視窗三賣掉一張票...

剩餘票數:5

視窗二賣掉一張票...

剩餘票數:4

視窗三賣掉一張票...

剩餘票數:3

視窗一賣掉一張票...

剩餘票數:2

視窗二賣掉一張票...

剩餘票數:1

視窗一賣掉一張票...

剩餘票數:0

視窗三賣掉一張票...

剩餘票數:-1

視窗二賣掉一張票...

剩餘票數:-2

因為三個視窗是併發賣票,所以當票只剩下一張的時候,三個視窗同時去賣它,就會造成剩餘票數變成負數,這個時候就需要同步的訪問這個車票資源來解決這個問題,**修正後如下:

//賣票執行緒

class mythread implements runnable catch (exception e)

system.out.println("剩餘票數:" + --ticket);

} else

}} }

}public class test001

}

程式執行結果如下:

視窗一賣掉一張票...

剩餘票數:9

視窗一賣掉一張票...

剩餘票數:8

視窗一賣掉一張票...

剩餘票數:7

視窗三賣掉一張票...

剩餘票數:6

視窗三賣掉一張票...

剩餘票數:5

視窗三賣掉一張票...

剩餘票數:4

視窗二賣掉一張票...

剩餘票數:3

視窗二賣掉一張票...

剩餘票數:2

視窗二賣掉一張票...

剩餘票數:1

視窗二賣掉一張票...

剩餘票數:0

java多執行緒

在網上看到很有意思的問題,摘下來好好看下 在面試的時候被問了乙個多執行緒的問題 回來仔細思考了一下,多執行緒是否真的能提高了效率?我對多執行緒的理解就是 比如挖乙個隧道,有2種開工方法 1 只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒 2 在山的兩頭挖,同時開工,最後在山的...

Java 多執行緒

1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...

JAVA 多執行緒

為hashmap的不正確使用所導致。hashmap在多執行緒環境下使用不安全。使用靜態hashmap作為聯絡人資料快取,key為手機號碼.private static maplxrdata new hashmap 多執行緒環境下不同步hashmap可能導致如下問題 1 多執行緒put操作後可能導致g...