mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-15 06:58:41 +00:00
feature: Rewrite thread-local storage pattern (#2452)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package com.iluwatar;
|
||||
|
||||
import java.security.SecureRandom;
|
||||
import java.util.concurrent.locks.LockSupport;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* Class with main logic.
|
||||
*/
|
||||
public abstract class AbstractThreadLocalExample implements Runnable {
|
||||
|
||||
private static final SecureRandom RND = new SecureRandom();
|
||||
|
||||
private static final Integer RANDOM_THREAD_PARK_START = 1_000_000_000;
|
||||
private static final Integer RANDOM_THREAD_PARK_END = 2_000_000_000;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
long nanosToPark = RND.nextInt(RANDOM_THREAD_PARK_START, RANDOM_THREAD_PARK_END);
|
||||
LockSupport.parkNanos(nanosToPark);
|
||||
|
||||
System.out.println(getThreadName() + ", before value changing: " + getter().get());
|
||||
setter().accept(RND.nextInt());
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for our value.
|
||||
*
|
||||
* @return consumer
|
||||
*/
|
||||
protected abstract Consumer<Integer> setter();
|
||||
|
||||
/**
|
||||
* Getter for our value.
|
||||
*
|
||||
* @return supplier
|
||||
*/
|
||||
protected abstract Supplier<Integer> getter();
|
||||
|
||||
private String getThreadName() {
|
||||
return Thread.currentThread().getName();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user