<div dir="ltr">Hello,<div><br></div><div>Is there any good way to simulate the edge cases one wants to reproduce while testing multi-threaded code in Java? Say I have a method foo that I want to test and make sure is threadsafe.</div><div><br></div><div>e.g. let's say I have a foo that has something like this in it:</div><div><br></div><div><div style="color:rgb(204,204,204);background-color:rgb(31,31,31);font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;line-height:18px;white-space:pre"><div><span style="color:rgb(78,201,176)">var</span> <span style="color:rgb(156,220,254)">store</span> <span style="color:rgb(212,212,212)">=</span> <span style="color:rgb(86,156,214)">this</span>.<span style="color:rgb(156,220,254)">cache</span>.<span style="color:rgb(220,220,170)">putIfAbsent</span>(<span style="color:rgb(156,220,254)">documentId</span>, <span style="color:rgb(79,193,255)">EMPTY</span>);                                                                               </div><div>        <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">store</span> <span style="color:rgb(212,212,212)">==</span> <span style="color:rgb(86,156,214)">null</span>) {</div><div>            <span style="color:rgb(156,220,254)">store</span> <span style="color:rgb(212,212,212)">=</span> <span style="color:rgb(197,134,192)">new</span> Some<span style="color:rgb(220,220,170)">CLass</span>(<span style="color:rgb(156,220,254)">documentId</span>);</div><div>            <span style="color:rgb(86,156,214)">this</span>.<span style="color:rgb(156,220,254)">cache</span>.<span style="color:rgb(220,220,170)">put</span>(<span style="color:rgb(156,220,254)">documentId</span>, <span style="color:rgb(156,220,254)">store</span>);</div><div>        } <span style="color:rgb(197,134,192)">else</span> <span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(156,220,254)">store</span> <span style="color:rgb(212,212,212)">==</span> <span style="color:rgb(79,193,255)">EMPTY</span>) {</div><div>            <span style="color:rgb(197,134,192)">throw</span> <span style="color:rgb(197,134,192)">new</span> <span style="color:rgb(220,220,170)">ConcurrencyException</span>();</div><div>        }</div></div></div><div><br></div><div>and I want to verify if two threads call foo with same documentId then 1 will succeed and the other will get an exception. This will happen most likely in above code but is not guaranteed depending on the timing (race conditions). </div><div><br></div><div>If one just lets multiple threads execute foo, then how the threads step on individual instructions in foo is undefined and I might not be able to hit all the cases. Is there any way to have fine-grained control to be able to reproduce all the scenarios one wants to test? If not, what is the best-practice to make sure a class or method is threadsafe? thanks,<br><div><br></div><div>S.</div></div></div>