關於多執行緒中synchronized的使用位置

2022-08-31 09:30:10 字數 790 閱讀 8051

在練習多執行緒之售票的時候,對於synchronized的使用有些困惑,因為我是用以下**:

public class threaddemo5 

}class saleticket_5 implements runnable catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "****"

+ ticket--);

}} }

}

synchronized在此雖然將共享資源的**塊上鎖,但是synchronized上鎖之後,執行緒需要把synchronized裡面的**塊執行完畢後才能釋放鎖,此**塊裡面是乙個迴圈,這就造成了最後的結果只有thread-0執行緒在執行的情況。

之後對其進行修改:

public class threaddemo5 

}class saleticket_5 implements runnable catch (interruptedexception e)

system.out.println(thread.currentthread().getname()

+ "****" + ticket--);

} else

break;

}} }

}

需要注意的是synchronized裡面需要包含全部的共享資源,以保證對共享資源操作的原子性,另外 不要忘記退出while迴圈

Delphi中多執行緒中Synchronize的運用

delphi中多執行緒用synchronize實現vcl資料同步顯示,delphi中多執行緒用synchronize實現vcl資料同步顯示 概述 vcl實現同步的另一種方法就是呼叫執行緒類的synchronize的過程,此過程需要乙個無引數的procedure,故在此procedure中無法傳遞引數...

關於多執行緒

1 程序是不活潑的。程序從來不執行任何東西,它只是執行緒的容器。執行緒總是在某個程序環境中建立的,而且它的整個壽命期都在該程序中。這意味著執行緒在它的程序 位址空間中執行 並且在程序的位址空間中對資料進行操作。因此,如果在單程序環境中,你有兩個或多個執行緒正在執行,那麼這兩個執行緒將共享單個位址空 ...

關於多執行緒

關於多執行緒 多執行緒的意思其實就是可以同時執行多個程式,並且互相之間不受影響 不過先後順序都不確定 單執行緒的缺點 雖然可以用while迴圈保證服務端可以一直服務,但是每一次只能服務乙個使用者,且read 方法是阻塞方法,如果這個已建立連線的使用者一直沒有發訊息,那麼連線就會一直阻塞在這,直到使用...