1 package com.atlassian.util.concurrent;
2
3 import static com.atlassian.util.concurrent.Functions.fromSupplier;
4 import static com.atlassian.util.concurrent.LockManagers.Manager.createManager;
5 import static com.atlassian.util.concurrent.ManagedLocks.lockFactory;
6 import static com.atlassian.util.concurrent.ManagedLocks.managedLockFactory;
7 import static com.atlassian.util.concurrent.WeakMemoizer.weakMemoizer;
8
9 import java.util.concurrent.Callable;
10 import java.util.concurrent.locks.Lock;
11
12
13
14
15 @Deprecated
16
17 public class LockManagers {
18
19
20
21
22
23
24
25
26
27 @Deprecated
28 public static <T> LockManager<T> weakLockManager() {
29 return weakLockManager(Functions.<T> identity());
30 }
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 @Deprecated
62 public static <T, D> LockManager<T> weakLockManager(final Function<T, D> stripeFunction) {
63 final Function<D, ManagedLock> lockFactory = fromSupplier(managedLockFactory(lockFactory()));
64 final WeakMemoizer<D, ManagedLock> memoizer = weakMemoizer(lockFactory);
65 return createManager(memoizer, stripeFunction);
66 }
67
68
69
70
71
72
73
74 static class Manager<T, D> implements LockManager<T> {
75 static final <T, D> Manager<T, D> createManager(final Function<D, ManagedLock> lockFactory, final Function<T, D> stripeFunction) {
76 return new Manager<T, D>(lockFactory, stripeFunction);
77 }
78
79 private final Function<D, ManagedLock> lockFactory;
80 private final Function<T, D> stripeFunction;
81
82 Manager(final Function<D, ManagedLock> lockFactory, final Function<T, D> stripeFunction) {
83 this.lockFactory = lockFactory;
84 this.stripeFunction = stripeFunction;
85 }
86
87 public <R> R withLock(final T descriptor, final Supplier<R> supplier) {
88 return lockFactory.get(stripeFunction.get(descriptor)).withLock(supplier);
89 }
90
91 public <R> R withLock(final T descriptor, final Callable<R> callable) throws Exception {
92 return lockFactory.get(stripeFunction.get(descriptor)).withLock(callable);
93 }
94
95 public void withLock(final T descriptor, final Runnable runnable) {
96 lockFactory.get(stripeFunction.get(descriptor)).withLock(runnable);
97 }
98 }
99 }
100