**
在編寫多執行緒程式時,最重要的就是搞清楚哪些變數是共享的,哪些變數是不共享的。也就是要分析清楚其中的原理呀。
因為最近要使用多執行緒就看了一些,對使用thread類的子類建立執行緒的情況,總結如下:
1.方法體內部定義的區域性變數不共享
這是因為方法內部定義的變數是在執行時動態生成的。每個執行緒都有乙個自己的堆疊,用於儲存執行時的資料。
最容易理解的就是遞迴呼叫時候,每次的入棧出棧操作。如下,每次呼叫時,變數aa都是在執行時堆疊上儲存的,方法結束變數也就釋放了。
public2.成員變數2.1 **示例int fib(int
n)
成員變數需要看變數指向的是否為同乙個物件。看下面的**示例:
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 兩個執行緒會最開始搶這個鎖,拿到鎖就會處於關鎖,執行後面的程式,其...