網路程式設計 執行緒 4 多個執行緒之間共享全域性變數

2022-03-10 13:52:40 字數 1557 閱讀 1389

知識點:什麼叫共享全域性變數?

共享變數

1、下面用乙個簡單的**演示一下共享全域性變數:

#

定義乙個全域性變數,建立倆個執行緒,通過執行緒1區改變這個全域性變數的值,你會發現執行緒2中的列印出來的全域性變數值是執行緒1修改過後的值

num = 100

deftest1():

global

num # 因為num是不可變型別的,所以要修改全域性變數的值必須加個global關鍵字才能修改它的值

num += 1

print('

test1:%d

'%num)

deftest2():

print('

test2:%d

'%num)

defmain():

t1 = threading.thread(target=test1)

t2 = threading.thread(target=test2)

t1.start()

t2.start()

print('

num的值為:%d

'%num)

if__name__ == '

__main__':

main()

執行結果如下:

test1:101

test2:101

num的值為:101

2、補充知識點:

當我們建立執行緒的時候,如:t1 = threading.thread(target=test1),我想往執行緒函式裡傳遞引數怎麼辦呢?只需t1 = threading.thread(target=test1,args=(需要傳遞的引數,)),args必須是乙個元祖,以逗號隔開,看下面的例子:

import

threading

deftest1(temp):

修改傳遞過來的列表

print('

test1-num:%s

' %str(temp))

deftest2(temp):

print('

test2-num:%s

' %str(temp))

num = [11, 22]

defmain():

t1 = threading.thread(target=test1, args=(num,)) #

將num傳遞給執行緒函式test1,這裡args是乙個元祖,逗號一定要寫

t2 = threading.thread(target=test2, args=(num,)) #

將num傳遞給執行緒函式test2

t1.start()

t2.start()

print(num)

執行結果如下:

test1-num:[11, 22, 33]

test2-num:[11, 22, 33]

[11, 22, 33]

JAVA 併發程式設計 多個執行緒之間共享資料(六)

1。假設每乙個執行緒執行的 同樣。能夠使用同乙個 runnable 物件,這個 runnable 物件中有那個共享資料,比如,賣票系統就能夠這麼做。2,假設每乙個執行緒執行的 不同。這時候須要用不同的 runnable 物件,比如,設計4個執行緒。當中兩個執行緒每次對j新增1。另外兩個執行緒對j每次...

執行緒學習筆記 4 執行緒之間通訊

子執行緒先迴圈10次,然後主線程迴圈100次,再子執行緒迴圈10次,主線程迴圈100次,就這樣迴圈往復50次。public class communtion01 start for intj 1 j 50 j class bussiness catch interruptedexception e ...

Python 中多個執行緒之間是共享全域性變數的

首先我們來回憶下在函式中修改全域性變數的情況。在乙個函式中,對全域性變數進行修改的時候,到底是否需要使用 global 進行說明,要看是否對全域性變數的執行指向進行了修改。如果修改了執行指向,即讓全域性變數指向了乙個新的地方,那麼必須使用 global。如果僅僅是修改了指向的空間中的資料,此時不是必...