您好 我正在構建一個小小的p2p程序,所以我想讓一個文件在下載時無法被刪除。簡單的解決方案是使用鎖,但是我希望它可以讓多個客戶端下載該文件(這意味着許多線程可以同時訪問下載方法)。 我希望事態明朗。 如何實現它的任何想法? 謝謝!在java中使用鎖
0
A
回答
1
使用java.util.concurrent.locks.ReentrantReadWriteLock。使用java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock作爲正在下載文件的線程,java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock作爲應該在下載時訪問它的其他線程。
0
http://download.java.net/jdk7/docs/api/java/util/concurrent/locks/package-frame.html有一堆鎖實現,如果所有可能的刪除器都在同一個虛擬機中,但在Java核心庫中沒有等效的話,這應該有所幫助。
0
當刪除來自系統調用你不能處理的情況下,也因此,無論你與應對是一個Java
不幸的是不可能的,你通過簡單的FileLockManager或任何守護你的「刪除」的方法,或者考慮到文件的大小很小,可以將其複製到另一個目錄(例如,每個客戶端/客戶端組1的臨時文件),然後用戶可以對原始文件執行任何他想要的操作
只是我的2美分
0
我對這個問題
- 一個編程溶液保持一個堆棧數據結構爲每個文件。保持同步。
- 每當一個線程被調用來下載一個文件時,它將會壓入堆棧中的一個元素,當它完成時它會彈出該元素。
- 現在,對於某個特定文件的刪除請求來了,它總是會檢查堆棧大小,並且只有堆棧大小爲零時纔會成功。
這種方法的問題:如果線程因某種原因或其他原因崩潰,堆棧將始終有一個條目,該文件將永遠不會被刪除。
相關問題
- 1. 如何在java中使用內部鎖?
- 2. 使用Java排隊鎖
- 3. 正確的鎖定/解鎖使用Java的可重入鎖
- 4. 在java中偏向鎖定
- 5. 在Java中寫鎖定
- 6. 在Java中死鎖(用一個例子)
- 7. 鎖定在Java EE應用程序中
- 8. 在Java中使用FileLock調用讀/寫鎖定
- 9. 在Java中使用文件鎖複製文件
- 10. 在Java中使用Thread對象的內部鎖定可以嗎?
- 11. 如何鎖定free在java/scala中使用兩個ConcurrentHashMap?
- 12. 如何使用java代碼在android中鎖定文件?
- 13. 使用Java鎖定屬性文件
- 14. Java併發鎖和條件使用
- 15. 死鎖使用Java日誌框架
- 16. 使用Java來鎖定屏幕
- 17. 使用java API鎖定和解鎖文件
- 18. 使用SQlite JDBC庫在Java/Scala中使用獨佔鎖來打開Sqlite連接
- 19. 可以通過在java鎖上始終使用tryLock來防止死鎖嗎?
- 20. 無鎖使用聯鎖CompareExchange
- 21. 如何在java中鎖定和解鎖網址
- 22. 鎖在oracle登錄用戶由java
- 23. 如何在Java中鎖定框架(GUI)
- 24. 如何在Java中鎖定序列化?
- 25. Java中是否存在互斥鎖?
- 26. 在java中釋放鎖對象
- 27. 如何在java中創建命名鎖?
- 28. 不足帳戶鎖定在java中
- 29. 在Windows和Java中刪除文件鎖
- 30. 在Java中鎖定哈希集合
但我看到使用這個鎖只有一個線程獲得鎖的訪問權限,我怎樣才能使其訪問許多線程? – yotamoo 2011-05-20 07:49:40
訣竅是暫停下載的時間間隔,短時間釋放writelock。這使所有等待的讀鎖能夠並行訪問迄今爲止下載的數據。然後重新獲取寫鎖並繼續下載。重要的是,所有讀寫鎖都是從同一個ReadWriteLock實例中獲取的。 – Sylar 2011-05-20 09:37:50
ReadLock不會彼此阻塞,它們可以同時訪問鎖定的區域(如果沒有WriteLock活動) – Sylar 2011-05-20 10:07:00