44import org .junit .Test ;
55import reactor .core .scheduler .Schedulers ;
66
7+ import java .util .concurrent .CountDownLatch ;
8+ import java .util .concurrent .TimeUnit ;
79import java .util .concurrent .atomic .AtomicInteger ;
810import java .util .concurrent .atomic .AtomicReference ;
911import java .util .function .BiFunction ;
@@ -236,37 +238,36 @@ public void testStaticFactory() {
236238 }
237239
238240 @ Test
239- public void testStaticFactoryKeepsThreadLocalReuseForPlainObjects () {
241+ public void testStaticFactoryKeepsThreadLocalReuseForPlainObjects () throws InterruptedException {
240242 Recycler <StringBuilder > recycler = Recycler .create (factory , rest , 2 );
241-
242- Integer created = Schedulers
243- .parallel ()
244- .schedule (() -> {
245- }) == null ? null : null ;
246243 AtomicReference <Integer > createdCount = new AtomicReference <>();
244+ CountDownLatch latch = new CountDownLatch (1 );
245+
247246 Schedulers
248247 .parallel ()
249248 .schedule (() -> {
250- recycler .doWith (sb -> {
251- sb .append ("first" );
252- return sb .toString ();
253- });
254- recycler .doWith (sb -> {
255- sb .append ("second" );
256- return sb .toString ();
257- });
258- createdCount .set (createCount .get ());
249+ try {
250+ recycler .doWith (sb -> {
251+ sb .append ("first" );
252+ return sb .toString ();
253+ });
254+ recycler .doWith (sb -> {
255+ sb .append ("second" );
256+ return sb .toString ();
257+ });
258+ createdCount .set (createCount .get ());
259+ } finally {
260+ latch .countDown ();
261+ }
259262 });
260263
261- while (createdCount .get () == null ) {
262- Thread .yield ();
263- }
264+ assertTrue (latch .await (5 , TimeUnit .SECONDS ));
264265
265266 assertEquals (Integer .valueOf (1 ), createdCount .get ());
266267 }
267268
268269 @ Test
269- public void testDestroyFactoryDoesNotUseThreadLocalForManagedResources () {
270+ public void testDestroyFactoryDoesNotUseThreadLocalForManagedResources () throws InterruptedException {
270271 Recycler <TestResource > recycler = Recycler .create (
271272 TestResource ::new ,
272273 TestResource ::reset ,
@@ -275,25 +276,26 @@ public void testDestroyFactoryDoesNotUseThreadLocalForManagedResources() {
275276 );
276277 AtomicReference <TestResource > first = new AtomicReference <>();
277278 AtomicReference <TestResource > second = new AtomicReference <>();
278- AtomicReference < Boolean > complete = new AtomicReference <>( );
279+ CountDownLatch latch = new CountDownLatch ( 1 );
279280
280281 Schedulers
281282 .parallel ()
282283 .schedule (() -> {
283- recycler .doWith (resource -> {
284- first .set (resource );
285- return resource .toString ();
286- });
287- recycler .doWith (resource -> {
288- second .set (resource );
289- return resource .toString ();
290- });
291- complete .set (Boolean .TRUE );
284+ try {
285+ recycler .doWith (resource -> {
286+ first .set (resource );
287+ return resource .toString ();
288+ });
289+ recycler .doWith (resource -> {
290+ second .set (resource );
291+ return resource .toString ();
292+ });
293+ } finally {
294+ latch .countDown ();
295+ }
292296 });
293297
294- while (complete .get () == null ) {
295- Thread .yield ();
296- }
298+ assertTrue (latch .await (5 , TimeUnit .SECONDS ));
297299
298300 assertSame (first .get (), second .get ());
299301 recycler .close ();
0 commit comments