Forums Register Login

Thread synchronization for Static factory method

+Pie Number of slices to send: Send
Hi

I am trying to understand if I should synchronize the below factory method.I tested the code with three sample thread and I am always getting the correct object for each thread(meaning Thread 1 always shows TYPE1,thread2 always show TYPE2 and thread3 always shows TYPE3 but I am still thinking that this may not be the case always unless I synchronize the factory method else it will not be thread safe meaning thread 1 could get type 2 or type 3 also.

Also another option is moving the static field b inside method so that it will be a local variable.

Please correct me If am wrong.

Thanks in advance.



Factory Class:

+Pie Number of slices to send: Send
If you want to reproduce the error, you will need more than a 100 iterations in the loop. It could be that 100 loops run so fast that the first thread is done before the second starts

Making b into a local variable is a much better option. Each thread will get it's own variable.
+Pie Number of slices to send: Send
Thanks for your input but I was able to prove that this is not threadsafe (atleast in this case) by adding Thread.sleep(200) in the Facotry method and I see that thread started getting wrong object.
1
+Pie Number of slices to send: Send
Excellent. But Jayesh's other point stands. Your class field b is completely unnecessary and should be removed; it's the source of the bug you're observing. I would also recommend making the binders variable final. That's not strictly necessary for a static field, but good practice (and prevents anyone else from changing it without realizing it's supposed to be constant). If the field were non-static, then making it final would be necessary in order to access it in a thread-safe manner without synchronization.
He puts the "turd" in "saturday". Speaking of which, have you smelled this tiny ad?
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com


reply
reply
This thread has been viewed 1682 times.
Similar Threads
Thread synchronized is not working as expected
print m1 m2 m3 in 3 different threads in sequence
Thread doubt
readObject() eat memory !!!
2 thread instances using the same Runnable object
More...

All times above are in ranch (not your local) time.
The current ranch time is
Mar 28, 2024 07:23:13.