ProjectLock.java 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package uk.ac.ic.wlgitbridge.writelatex;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.concurrent.locks.Lock;
  5. import java.util.concurrent.locks.ReentrantLock;
  6. /**
  7. * Created by Winston on 20/11/14.
  8. */
  9. public class ProjectLock {
  10. private final Map<String, Lock> projectLocks;
  11. public ProjectLock() {
  12. projectLocks = new HashMap<String, Lock>();
  13. }
  14. public void lockForProject(String projectName) {
  15. System.out.println("Locking for: " + Thread.currentThread().getId());
  16. getLockForProjectName(projectName).lock();
  17. }
  18. public void unlockForProject(String projectName) {
  19. System.out.println("Unlocking for: " + Thread.currentThread().getId());
  20. getLockForProjectName(projectName).unlock();
  21. }
  22. private synchronized Lock getLockForProjectName(String projectName) {
  23. Lock lock = projectLocks.get(projectName);
  24. if (lock == null) {
  25. lock = new ReentrantLock();
  26. projectLocks.put(projectName, lock);
  27. }
  28. return lock;
  29. }
  30. }