Java多執行緒 變數共享分析

2021-08-01 18:39:28 字數 1401 閱讀 5691

** 

在編寫多執行緒程式時,最重要的就是搞清楚哪些變數是共享的,哪些變數是不共享的。也就是要分析清楚其中的原理呀。

因為最近要使用多執行緒就看了一些,對使用thread類的子類建立執行緒的情況,總結如下:

1.方法體內部定義的區域性變數不共享

這是因為方法內部定義的變數是在執行時動態生成的。每個執行緒都有乙個自己的堆疊,用於儲存執行時的資料。

最容易理解的就是遞迴呼叫時候,每次的入棧出棧操作。如下,每次呼叫時,變數aa都是在執行時堆疊上儲存的,方法結束變數也就釋放了。

public

int fib(int

n)

2.成員變數2.1 **示例

成員變數需要看變數指向的是否為同乙個物件。看下面的**示例:

package

file2;

public

class

analy

}class ownthread extends

thread

public

void

run()

catch

(interruptedexception e) {}

}system.out.println(

this.getname()+","+sno);}}

}class num //

定義乙個類

}

共享同乙個物件,執行緒可以互動,執行結果:

2.2分析

程式中主函式定義了num物件的例項i,定義執行緒是傳遞到了thread0和thread1這樣三個變數就共享了乙個num物件的例項。而執行緒thread0和執行緒thread1又有自己的私有變數sno,可以用來儲存某一時刻的共享變數的數值。

判斷的。位址相同就是同乙個物件,上面的三個就是同乙個物件。

(2)如果把上面的例子中共享的物件例項用基本資料型別替換是不行的。因為基本資料型別程式會自動的用預設值初始化,也就是申明和定義時一起的。此時在mian函式中定義執行緒,傳遞的基本資料型別引數,只能是初始化執行緒中的另乙個物件,而不是同乙個物件。

3.總結

總之,在多執行緒程式設計中,知道各個執行緒如何、怎麼樣共享資料是很重要的。

如上面的程式,可以在主線程和其他兩個子執行緒之間共享乙個物件,來實現他們之間的互動處理。

多執行緒共享變數 多執行緒共享全域性變數

1.多執行緒的執行順序是無序的 像2個人賽跑,乙個先跑乙個後跑,但根據每個人跑的速度不一樣,跑一半,二者可能跑在一起去了。2.又因為多執行緒是共享乙個全域性變數的,就導致資料容易被弄髒 假如老闆讓兩個員工寫兩個主題ppt,若這兩個人沒商量好,都做了同乙個主題的ppt,導致不但速度很慢,且這個ppt有...

多執行緒共享變數

題目如下 設計4個執行緒,其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減少1。如果每個執行緒執行的 相同 可以使用同乙個runnable物件,這樣在不同的執行緒中只需要把這個runnable物件傳到裡面去即可,因為runnable物件的run方法天熱原子性,不可能run方法被打斷,乙個run...

多執行緒共享變數

from threading import thread,lock global num 0 def func1 global global num 全域性變數 for i in range 1000000 lock.acquire 兩個執行緒會最開始搶這個鎖,拿到鎖就會處於關鎖,執行後面的程式,其...