On Wed, 12 Mar 2025 08:09:04 GMT, Per Minborg <pminb...@openjdk.org> wrote:
>> If you have an `@Stable Object[]`, then the elements are also considered 
>> `@Stable`. Then you can do something like:
>> 
>>     ReentrantLock[] locks;
>> 
>>     T get(int idx) {
>>         Object x = backing[idx];
>>         if (x == null) {
>>             return compute(idx);
>>         }
>>         return unwrap(x);
>>     }
>> 
>>     T compute(int idx) {
>>         ReentrantLock lock = locks[idx];
>>         lock.lock();
>>         try {
>>             Object x = backing[idx];
>>             if (x != null) {
>>                 return unwrap(x);
>>             }
>>             T obj = ...;
>>             backing[idx] = wrap(obj);
>>             return obj;
>>         } finally {
>>             lock.unlock();
>>         }
>>     }
>
> What would be the difference between `@Stable StableValueImpl<E>[] backing` 
> and `@Stable Object[] backing`?

For an `Object[]`, you only need to load the object from the array and it is 
probably what you need. For a `StableValueImpl[]`, you need to load the 
`StableValueImpl` from the array, and load the value from that 
`StableValueImpl`, which is 2 levels of indirections.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/23972#discussion_r1990993459

Reply via email to