提交 e422b65b 编写于 作者: B Benjamin Winterberg

Simplify code

上级 a636658e
......@@ -18,13 +18,10 @@ public class Lock2 {
executor.submit(() -> {
lock.lock();
try {
System.out.println(lock.isLocked());
TimeUnit.SECONDS.sleep(1);
}
catch (InterruptedException e) {
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
finally {
} finally {
lock.unlock();
}
});
......
......@@ -25,44 +25,26 @@ public class Lock3 {
try {
TimeUnit.SECONDS.sleep(1);
map.put("foo", "bar");
}
catch (InterruptedException e) {
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
finally {
} finally {
lock.writeLock().unlock();
}
});
executor.submit(() -> {
Runnable readTask = () -> {
lock.readLock().lock();
try {
String foo = map.get("foo");
System.out.println(foo);
System.out.println(map.get("foo"));
TimeUnit.SECONDS.sleep(1);
}
catch (InterruptedException e) {
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
finally {
} finally {
lock.readLock().unlock();
}
});
executor.submit(() -> {
lock.readLock().lock();
try {
String foo = map.get("foo");
System.out.println(foo);
TimeUnit.SECONDS.sleep(1);
}
catch (InterruptedException e) {
throw new IllegalStateException(e);
}
finally {
lock.readLock().unlock();
}
});
};
executor.submit(readTask);
executor.submit(readTask);
ConcurrentUtils.stop(executor);
}
......
package com.winterbe.java8.samples.concurrent;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
......@@ -10,18 +12,18 @@ import java.util.concurrent.locks.StampedLock;
*/
public class Lock4 {
private static int count = 0;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
Map<String, String> map = new HashMap<>();
StampedLock lock = new StampedLock();
executor.submit(() -> {
long stamp = lock.writeLock();
try {
count++;
TimeUnit.SECONDS.sleep(1);
map.put("foo", "bar");
} catch (InterruptedException e) {
throw new IllegalStateException(e);
} finally {
......@@ -29,29 +31,19 @@ public class Lock4 {
}
});
executor.submit(() -> {
Runnable readTask = () -> {
long stamp = lock.readLock();
try {
System.out.println(Thread.currentThread().getName() + ": " + count);
System.out.println(map.get("foo"));
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
} finally {
lock.unlockRead(stamp);
}
});
executor.submit(() -> {
long stamp = lock.readLock();
try {
System.out.println(Thread.currentThread().getName() + ": " + count);
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
} finally {
lock.unlockRead(stamp);
}
});
};
executor.submit(readTask);
executor.submit(readTask);
ConcurrentUtils.stop(executor);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册