![](/img/trans.png)
[英]What exactly happens when thread enters a synchronized block / method in 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.