我有實例從這樣的類:線程之間共享一個方法的局部變量嗎?
public class One
{
Semaphore S = null;
public One(Semaphore S)
{
this.S = S;
}
public void Run(int ID)
{
S.WaitOne();
Console.WriteLine("Thread [" + ID + "] Entered");
Random R = new Random();
Thread.Sleep(R.Next(100, 1000));
Console.WriteLine("Thread [" + ID + "] Exited");
S.Release();
}
}
在我的節目我實例化了幾個新的線程。每個線程運行上述類中的「Run()」方法。
Semaphore S = new Semaphore(5, 5);
One O = new One(S);
for (int j = 0; j < 10; j++)
{
Thread T = new Thread(delegate() { O.Run(j); });
T.Start();
}
我希望看到一個從0到9的數字列表,但是沒有排序。但是我的結果顯示「Run()」方法中的「ID」變量作爲局部變量在所有線程之間共享。
![Output][1]
我想知道,如果我有一個類的一個實例,很多線程從實例中運行的方法,所以在所有線程之間共享該方法的局部變量?或者每個線程都有自己的本地副本?我應該爲該類的每個線程創建一個新實例嗎?
我認爲它不是共享的ID變量,但是從環Ĵ..我認爲這是通過引用傳遞給代表,所以他們都看到相同的.. – xs0 2011-05-28 13:03:03
... *刪除* ... – DarkSquirrel42 2011-05-28 13:08:27