public enum SynchronizationStrategy extends Enum<SynchronizationStrategy>
Enum Constant and Description |
---|
LOCK_FREE
Lock-free algorithm based on CAS(compare and swap) of immutable objects.
|
NONE
This is fake strategy which does not perform synchronization at all.
|
SYNCHRONIZED
Blocking strategy based on java
synchronized keyword. |
Modifier and Type | Method and Description |
---|---|
static SynchronizationStrategy |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static SynchronizationStrategy[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final SynchronizationStrategy LOCK_FREE
Advantages: This strategy is tolerant to high contention usage scenario, threads do not block each other.
Disadvantages: The sequence "read-clone-update-save" needs to allocate one object per each invocation of consumption method.
Usage recommendations: when you are not sure what kind of strategy is better for you.
The LocalBucketBuilder.build()
without parameters uses this strategy.
public static final SynchronizationStrategy SYNCHRONIZED
synchronized
keyword.
Advantages: Never allocates memory.
Disadvantages: Thread which acquired the lock(and superseded from CPU by OS scheduler) can block another threads for significant time.
Usage recommendations: when your primary goal is avoiding of memory allocation and you do not care about contention.
public static final SynchronizationStrategy NONE
Advantages: Never allocates memory and never acquires any locks, in other words you pay nothing for synchronization.
Disadvantages: If your code or third-party library code has errors then bucket state will be corrupted.
Usage recommendations: iff you have guarantees that bucket will be never used from multiple threads,
for example in cases where your third-party library(like akka or rx-java) prevents concurrent access and provide guarantees of visibility,
or when you are so senior guy that can manage synchronization by yourself.
public static SynchronizationStrategy[] values()
for (SynchronizationStrategy c : SynchronizationStrategy.values()) System.out.println(c);
public static SynchronizationStrategy valueOf(String name)
name
- the name of the enum constant to be returned.IllegalArgumentException
- if this enum type has no constant with the specified nameNullPointerException
- if the argument is nullCopyright © 2021. All rights reserved.