您好我正陷入一個JavaFX應用程序的死鎖,我不知道爲什麼會發生這種情況...... 初始化我的應用程序時,我啓動一個Thread來加載創建一個擴展我的DatabaseManager的對象的特定視圖。同時,另一個線程在另一個視圖上執行相同的操作,另一個對象正在擴展DatabaseManager。爲什麼這個僵局?
進入下列構造函數的第一個線程進入同步塊,但從未到達「System.out.println(」**** 3「);」線。 發生這種情況後,我稍後開始線程進入構造函數,當然因爲資源從未再次被釋放而被阻塞。 由線程1. 任何想法,爲什麼這導致了死鎖?我使用javafx.concurrent.Task與java.lang.Thread中
public abstract class DatabaseManager {
protected static final AtomicReference<EntityManager> entityManager = new AtomicReference<>();
protected DatabaseManager() {
if (entityManager.get() == null) {
System.out.println("****1");
synchronized (entityManager) {
if (entityManager.get() == null) {
System.out.println("****2");
entityManager.set(Persistence.createEntityManagerFactory(
DatabaseConstants.hsqlPersistenceUnitName,
DatabaseConstants.getProperties()).createEntityManager());
System.out.println("****3");
}
}
}
}
...