多執行緒教程 簡單實現案例

2022-09-08 21:30:20 字數 3421 閱讀 1190

總結程序就是正在執行的程式,是作業系統執行程式是產生的,它是獨立存在的,程序之間互不干擾。

執行緒是程序的乙個子集,是程序中的實際運作單位,開發人員可以通過操作執行緒進行多處理器程式設計。

1)在耗時的操作時使用執行緒,可以提高程式執行的速度

2)在並行操作時使用執行緒,提高並行的速度

3)多cpu系統中使用執行緒,提高cpu利用率

4)改善程式結構,對乙個程式進行拆分,降低程式執行難度

5)程序之間的通訊十分不方便,同乙個程序中的執行緒可以進行資料共享

在 j**a 中實現執行緒的方式有 2 種,一種是繼承 thread,一種是實現 runnable 介面。

class

mythread

extends

thread}}

}public

class

threaddemo

}

執行結果:

ticket =

5ticket =

4ticket =

5ticket =

5ticket =

4ticket =

3ticket =

2ticket =

1ticket =

4ticket =

3ticket =

3ticket =

2ticket =

1ticket =

2ticket =

1

每個執行緒單獨賣了5張票,即獨立的完成了買票的任務,但實際應用中,比如火車站售票,需要多個執行緒去共同完成任務,在本例中,即多個執行緒共同買5張票。

class

mythread

implements

runnable}}

}public

class

runnabledemo

}

執行結果:

ticket =

5ticket =

2ticket =

1ticket =

3ticket =

4

在第二種方法(runnable介面實現多執行緒)中,買票輸出的順序並不是54321,這是因為執行緒執行時會被搶占資源,所以輸出結果不唯一。ticket並不是原子操作。

public

class

synchronizeddemo

implements

runnable

public

void

setname

(string name)

public

static

integer

getcount()

public

static

void

setcount

(integer count)

public

synchronizeddemo()

public

synchronizeddemo

(string name)

@override

public

void

run(

)catch

(interruptedexception e)

// synchronized關鍵字裡面必須具備唯一性

// 這裡由於是對同乙個物件開啟多執行緒,所以this是唯一的

synchronized

(this)}

}}}public

test

}

執行結果:

"c:\program files\j**a\jdk-11.0.9\bin\j**a.exe"

thread

[光頭強,

5,main] 開始吃蘋果, 還剩4個蘋果

thread

[熊二,

5,main] 開始吃蘋果, 還剩3個蘋果

thread

[熊大,

5,main] 開始吃蘋果, 還剩2個蘋果

thread

[熊大,

5,main] 開始吃蘋果, 還剩1個蘋果

thread

[熊二,

5,main] 開始吃蘋果, 還剩0個蘋果

public

class

synchronizeddemo

implements

runnable

public

void

setname

(string name)

public

static

integer

getcount()

public

static

void

setcount

(integer count)

public

synchronizeddemo()

public

synchronizeddemo

(string name)

@override

public

synchronized

void

run(

)catch

(interruptedexception e)

if(count >0)

}}}public

test

}

執行結果:

"c:\program files\j**a\jdk-11.0.9\bin\j**a.exe"

thread

[光頭強,

5,main] 開始吃蘋果, 還剩4個蘋果

thread

[熊二,

5,main] 開始吃蘋果, 還剩3個蘋果

thread

[熊大,

5,main] 開始吃蘋果, 還剩2個蘋果

thread

[熊大,

5,main] 開始吃蘋果, 還剩1個蘋果

thread

[熊二,

5,main] 開始吃蘋果, 還剩0個蘋果

(1)wait():使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。

(2)sleep():使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉interruptedexception異常。

(3)notify():喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某乙個等待狀態的執行緒,而是由jvm確定喚醒哪個執行緒,而且不是按優先順序。

(4)allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒乙個物件的鎖,而是讓它們競爭。

綜合案例**

簡單多執行緒死鎖案例

在多執行緒程式中死鎖的乙個令人頭疼的問題,為了避免死鎖就要避免死鎖產生,就要知道死鎖產生的條件 死鎖產生的原因是同步巢狀,所以在開發過程中要盡量避免同步巢狀 下面是我的乙個簡單的同步死鎖案例 定義兩個鎖 class lock寫乙個執行緒 public class threaddemo4 extend...

多執行緒簡單案例 join( ) lock()

join 在呼叫結束前,主線程不會結束 不加的話,主線程會在子執行緒結束前繼續執行 並行 加了join 主線程會等待子執行緒結束後在繼續執行下去 序列 python3 main print number stop after son thread stop son thread print id i...

Python 多執行緒簡單案例 執行緒同步

codeing utf 8 import time import threading 執行緒同步 class mythead threading.thread def init self,name,delay threading.thread.init self self.name name sel...