我想同步訪問公共資源(數據庫)的類的實例。這可以通過使用notify和wait()來完成,但是我需要知道如果不同的java程序正在使用這個類創建實例,而不是如何同步它們。 謝謝如何同步不同的Java程序來訪問公共資源
回答
由於Sotirios Delimanolis評論說:「你不能,同步只能發生在一個JVM的範圍內。」
因此,您應該使用一些外部資源來執行此同步。一個文件可能是一個很好的例子:
try {
// Get a file channel for the file
File file = new File("filename");
FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
// Use the file channel to create a lock on the file.
// This method blocks until it can retrieve the lock.
FileLock lock = channel.lock();
// ** Your logic here **
} finally {
// Release and close
lock.release();
channel.close();
}
在多個進程正在共享資源的情況下,同步將無濟於事。同步等待/通知模型旨在用於單個進程中的多個線程。
您需要編寫一個邏輯來顯式鎖定資源。在你的場景中,你需要在處理之前鎖定數據庫表,以便其他進程不能同時訪問它。
如果您正在使用Oracle數據庫,那麼你可以使用lock語句到數據庫表:
您可以使用LOCK TABLE語句來鎖定整個數據庫表中的一個 指定的鎖定模式,這樣就可以共享或拒絕訪問他們。行 共享鎖允許併發訪問表;他們阻止其他 用戶鎖定整個表格以供專用。當您的事務發出提交或回滾時,表鎖定爲 。
嗯,我試圖鎖定表,如果一個請求來它但其他所有的Java程序引發異常。 –
@RishabhKumar正是這個想法,當一個進程正在使用它或鎖定它時,其他進程應該會得到一個異常。 –
你嘗試同步關鍵字來同步特定的方法或語句,這樣所有的情況下將這種同步語句一次一個進入裏面。
例如,
synchronized(this)
{
//Do code here
}
- 1. 如何在同一資源上同步兩個進程訪問?
- 2. 對資源的同步訪問
- 3. 共享資源,例如帶寬同步
- 4. 同步更新公共文件的進程間訪問
- 5. 在Java中同步對資源的訪問(Spring MVC)
- 6. 從應用程序訪問「公共」圖形API資源?
- 7. 如何在不同步代碼的情況下共享對java資源的訪問?
- 8. 同步對UI線程的資源訪問
- 9. 「同步訪問線程」與「同步共享對象」相反嗎?
- 10. 同步線程在同一時間讀取不同的資源
- 11. 如何打包/訪問GWT模塊中的公共資源?
- 12. 如何定義node_acl公共可訪問的資源
- 13. 如何同步MsBuild中的項目之間的共享資源
- 14. 如何訪問Docker中不同容器的公共IP
- 15. 避免同時訪問Web應用程序中的共享資源
- 16. 如何在Ruby On Rails中阻止訪問公共/資源url
- 17. 如何從java中的不同類中的私有類訪問公共方法?
- 18. 訪談問:Java同步
- 19. 來自不同類庫的訪問字符串資源
- 20. Java:多線程鏈表訪問同步
- 21. 可以通過訪問NAT下的不同網絡資源來改變公共IP地址嗎?
- 22. Java多線程共享同一對象的同步問題
- 23. 如何訪問Java中的調用程序的資源目錄
- 24. AngularJS中的同步$資源
- 25. 如何同步訪問indexedDB?
- 26. 公共資源的公共URL
- 27. 不同的WAR文件,共享資源
- 28. WPF資源訪問從不同的程序集,如果沒有App.xaml
- 29. 如何訪問來自不同公寓模型的COM對象?
- 30. 如何避免來自java程序的多個http訪問wave資源文件?
你不能。同步只能在一個JVM的範圍內發生。 –
也許你應該使用數據庫的事務機制,這取決於你的需求可能就足夠了。 –
這就是我的想法。謝謝。 –