For your original formulation for the problem.. 

> 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?

Yes, one of the thread will print true, true as there is a happens-before 
between the two writes to concurrent hash map (even if they are possibly on 
the keys that map to different bins)

On Monday, September 12, 2022 at 2:46:38 PM UTC-4 [email protected] wrote:

> > 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.
>
> What do you mean?
>
> poniedziałek, 12 września 2022 o 17:44:31 UTC+2 [email protected] 
> napisał(a):
>
>> 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 [email protected] 
>> 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 <[email protected]> 
>>> 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 <[email protected]> 
>>>> 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 <[email protected]> 
>>>>> 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 <[email protected]> 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 [email protected].
>>>>>>> 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 [email protected].
>>>>>> 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 [email protected].
>>>>> 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 [email protected].
>>>>
>>> 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 [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/019370b7-f80b-493b-94d8-20db47d93adcn%40googlegroups.com.

Reply via email to