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/CAFKLJkybiwv%2Bko9Xy8uAkkvCNJiaROBafifrmXbJCgV4oXCWTQ%40mail.gmail.com.
