簡體   English   中英

Java:從同步塊啟動新線程時會發生什么?

[英]Java: what happens when a new Thread is started from a synchronized block?

這里的第一個問題:在Java中它是一個非常短暫但基本的東西,我不知道......

在下面的例子中, run()方法somemethod()確實獲取的鎖以某種方式執行的?

public synchronized void somemethod() {
    Thread t = new Thread( new Runnable() {
       void run() {
           ...          <-- is a lock held here ?
       }
    }
    t.start();
    ... 
    (lengthy stuff performed here, keeping the lock held)
    ...
}

編號run()從它自己的上下文開始,同步。 它沒有任何鎖定。 如果確實如此,您將遇到死鎖或者違反規范,該規范聲明在任何給定時間只有一個線程可以鎖定對象。

如果run()要在同一個對象上再次調用somemethod() ,則必須等待創建它的somemethod()調用首先完成。

不,只有原始線程具有鎖定(因為實際上只有一個線程可以持有鎖)。

我猜這個新線程開始與synchronized方法並行運行。

someMethod()仍然擁有自己的鎖,只能防止對該對象實例同時調用此方法。

線程不會繼承鎖,只有當線程嘗試對創建它的對象調用someMethod()時才會被鎖禁止,如果someMethod()當前正在為該對象執行的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM