Q
会导致死锁?
2
A
回答
8
主题不能获得通过另一个线程拥有的锁。 但是一个 线程可以获取它已经拥有的锁。允许线程通过 多次获取同一个锁使得可重入 同步。这描述了一种情况,其中同步代码 直接或间接地调用也包含 同步代码的方法,并且这两组代码使用相同的锁。
7
没记错,折返意味着相同的线程可以得到相同的锁几次,如:
private final Object lock = new Object();
public void foo() {
synchronized(lock) {
bar();
}
}
public void bar() {
synchronized(lock) {
//...
}
}
作品如预期,以及(在这里this
作为一个隐含的锁定对象):
public synchronized void foo() {
bar();
}
public synchronized void bar() {
//...
}
并且没有发生死锁。当然,其他线程既不能同时访问foo()
也不能访问bar()
,因为锁已被占用。
底线:锁是通过线程进行的,而不是通过代码的方法/块进行的。并且获得同一个线程已经获得的锁定是没有任何操作的。
0
每object
有lock and a key
保护其crucial data state
, 所以没有every Class has a lock and a key
以保护其crucial static data state.
synchronized keyword on the atomic statements
(任何一种方法或雾化语句)
会像锁定的对象。当一个线程访问该方法或原子语句时,它必须获取key for that object
。
Once it obtains the key,
its free to access this synchronized method/statement
or any other synchronized method/statement of that object.
Thats what reentrant is all about.
但是没有其他的线程将能够访问这个对象的同步化块,直到当前的键持有线程,放开键。
相关问题
- 1. pthread_mutex_lock导致死锁
- 2. AutoResetEvent.WaitOne()导致死锁
- 3. 我的GetEnumerator会导致死锁吗?
- 4. 此代码是否会导致死锁?
- 5. INSERT操作是否会导致死锁?
- 6. 这怎么会导致死锁?
- 7. 为什么这不会导致死锁
- 8. 导致死锁的SQLBulkCopy
- 9. MemoryStream.CopyTo()导致线程死锁
- 10. 为什么嵌套锁不会导致死锁?
- 11. 如何在concurrent.futures.ThreadPoolExecutor中使用不会导致死锁的锁?
- 12. 只使用关键部分的读/写锁会导致死锁
- 13. 硬件发生“死锁”还是软件导致死锁?
- 14. 线程关闭导致的死锁
- 15. 如何成功导致死锁
- 16. 为什么睡眠(1000)导致死锁?
- 17. pthread_mutex_lock和pthread_cond_wait/signal导致死锁
- 18. WCF服务导致SQL死锁错误
- 19. 导致死锁的SQL更新
- 20. 可以使用sem_trywait()导致死锁
- 21. assetResourcesForAsset:导致死锁在同一时间
- 22. JxBrowser导致线程死锁120秒
- 23. Javascript Ajax可能导致死锁吗?
- 24. 导致死锁错误的SQL查询
- 25. 从几个线程调用WSAStartup()会导致死锁吗?
- 26. 导致会话死锁的php cURL请求
- 27. mysql存储过程 - 会导致死锁性能?
- 28. RCTBridge需要dispatch_sync加载RCTDevLoadingView。这可能会导致死锁
- 29. 以下SQL语句是否会导致死锁?
- 30. 为什么这个线程管理模式会导致死锁?
如何使用Google搜索一下? –