close

執行緒的生命週期:

New -> Runnable -> Running -> Blocked  -> Dead

➢ New(新建): 新建立的執行緒經過初始化後, 進入Runnable狀態

➢ Runnable(就緒): 等待執行緒排程, 排程後進入執行狀態

➢ Running(執行): 執行緒正常執行

➢ Blocked(阻塞): 暫停執行, 解除阻塞後進入Runnable狀態重新等待排程

※3種情形從Running進入Blocked※

1. 同步: 因資源被其他執行緒鎖定, 進入Locked狀態, 直到該資源被釋放才解除

2. 睡眠: 執行緒執行sleep()或join()方法, 執行緒進入sleeping狀態, 區別在於sleep等待的時間是固定的, 而join則是等待子執行緒執行完畢

3. 等待: 執行緒中執行wait()方法, 執行緒進入waiting狀態, 直到收到其他執行緒通知被喚醒 

➢ Dead(消亡): 執行緒方法執行完畢返回或者異常終止

 

簡單測試多執行緒join的方法:

from threading import Thread

import time

 

def waitingOne():

    print('start waiting - 1:' + time.strftime('%H:%M:%S') + '\n')

    time.sleep(3)

    print('stop waiting - 1:' + time.strftime('%H:%M:%S') + '\n')

 

def waitingTwo():

    print('start waiting - 2:' + time.strftime('%H:%M:%S') + '\n')

    time.sleep(3)

    print('stop waiting - 2:' + time.strftime('%H:%M:%S') + '\n')

 

task = []

thread1 = Thread(target = waitingOne)

thread1.start()

thread2 = Thread(target = waitingTwo)

thread2.start()

task.append(thread2)

print('Start join: ' + time.strftime('%H:%M:%S') + '\n')

for i in task:

    i.join()

print('End join: ' + time.strftime('%H:%M:%S') + '\n')

 

執行結果:

start waiting - 1: 14:13:29

Start join: 14:13:29

start waiting - 2: 14:13:29

stop waiting - 1: 14:13:32

End join: 14:13:37

start waiting - 2: 14:13:37

arrow
arrow
    文章標籤
    python threading thread
    全站熱搜

    楓綺 發表在 痞客邦 留言(0) 人氣()