I think the issue here is more the ConcurrentHashMap that doesn't promise 
you'll get both entries when calling c.values() in either one of the 
threads.

On Monday, September 12, 2022 at 7:50:56 AM UTC-7 gros...@gmail.com wrote:

> Thanks, for your response. I know that output "true" is possible. My 
> question is: Is it guaranteed by JMM that one of T1, T2 will print "true, 
> true"? 
>
> pon., 12 wrz 2022, 15:11 użytkownik Peter Veentjer <alarm...@gmail.com> 
> napisał:
>
>> I think this example is better:
>>
>> class Foo{
>>   int x;
>> }
>>
>> Thread1:
>>    Foo foo = new Foo();
>>    foo.x = 10;                                           (1)
>>    concurrentMap.put("1", foo);             (2)
>>
>> Thread2:
>>     Foo foo = concurrentMap.get("1");   (3)
>>     if(foo!=null) print(foo.x);                   (4)
>>
>> There is a happens-before edge between (1) and (2) due to program-order 
>> rule. And also between (3) and (4) there is a happens-before edge due to 
>> program-order rule.
>>
>> And if thread2 sees the non null value, then there is a happens-before 
>> edge between (2) and (3) due to either the volatile variable rule or 
>> monitor lock rule (often this is called memory consistency effects on e.g. 
>> queues)
>>
>> Since the happens-before relation is transitive, there is a 
>> happens-before edge between (1) and (4).
>>
>> On Mon, Sep 12, 2022 at 4:02 PM Alper Tekinalp <alper.t...@gmail.com> 
>> wrote:
>>
>>> From util.concurrent:
>>>
>>> > Actions in a thread prior to placing an object into any concurrent 
>>> collection happen-before actions subsequent to the access or removal of 
>>> that element from the collection in another thread.
>>>
>>> So ether one of threads will print (true, true) I guess.
>>>
>>> On Mon, Sep 12, 2022, 3:42 PM Peter Veentjer <alarm...@gmail.com> wrote:
>>>
>>>> If T1 would run first, the content of the ConcurrentHashMap is 
>>>> (1,true), and therefore there is only 1 value. 
>>>>
>>>> So it will print 'true' and not 'true,true' because T2 has not run yet.
>>>>
>>>> On Mon, Sep 12, 2022 at 3:31 PM r r <gros...@gmail.com> wrote:
>>>>
>>>>> Hello,
>>>>> let's look for the following piece of code:
>>>>>
>>>>> c = new ConcurrentHashMap<Integer, Boolean>();
>>>>> T1:  
>>>>>     c.put(1, true);
>>>>>     for (Boolean b : c.values()) {
>>>>>         print(b);
>>>>>     }
>>>>> T2:  
>>>>>     c.put(2, true);
>>>>>     for (Boolean b : c.values()) {
>>>>>         print(b);
>>>>>     }
>>>>>
>>>>> Is it guaranteed by JMM that any thread (T1 or T2) prints true, true?
>>>>> To put it in another way, is it guaranteed that T1 or T2 observes 
>>>>> both c.put?
>>>>>
>>>>> If yes / no, why?
>>>>> Thanks in advance for your time.
>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "mechanical-sympathy" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to mechanical-symp...@googlegroups.com.
>>>>> To view this discussion on the web, visit 
>>>>> https://groups.google.com/d/msgid/mechanical-sympathy/0945e8e3-1070-4166-b269-1c4e6c49da3en%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/mechanical-sympathy/0945e8e3-1070-4166-b269-1c4e6c49da3en%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "mechanical-sympathy" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to mechanical-symp...@googlegroups.com.
>>>> To view this discussion on the web, visit 
>>>> https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdAzirHPwyj%2B55%3D%2BSvkcLbKg80wzgspu8CDOGHOMD0Zchg%40mail.gmail.com
>>>>  
>>>> <https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdAzirHPwyj%2B55%3D%2BSvkcLbKg80wzgspu8CDOGHOMD0Zchg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "mechanical-sympathy" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to mechanical-symp...@googlegroups.com.
>>> To view this discussion on the web, visit 
>>> https://groups.google.com/d/msgid/mechanical-sympathy/CABKpSe5Z5ns%2BJ0O8cd-z0%2B%3DSgj75gr65LXbSur6W3BaELebN-A%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/mechanical-sympathy/CABKpSe5Z5ns%2BJ0O8cd-z0%2B%3DSgj75gr65LXbSur6W3BaELebN-A%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "mechanical-sympathy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to mechanical-symp...@googlegroups.com.
>>
> To view this discussion on the web, visit 
>> https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdCPKSx5c0wj2mdXkg%3DHm1b4H65ZTx1K_vJ7d9P4KC2q4w%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdCPKSx5c0wj2mdXkg%3DHm1b4H65ZTx1K_vJ7d9P4KC2q4w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mechanical-sympathy+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/5ee8e1b5-0130-4778-99c8-c110b240c4f0n%40googlegroups.com.

Reply via email to