< prev index next >

test/hotspot/jtreg/runtime/handshake/HandshakeDirectTest.java

Print this page

        

*** 22,32 **** * */ /* * @test HandshakeDirectTest ! * @summary This test tries to stress direct handshakes between threads. * @library /testlibrary /test/lib * @build HandshakeDirectTest * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+SafepointALot -XX:BiasedLockingDecayTime=100000000 -XX:BiasedLockingBulkRebiasThreshold=1000000 -XX:BiasedLockingBulkRevokeThreshold=1000000 HandshakeDirectTest */ --- 22,32 ---- * */ /* * @test HandshakeDirectTest ! * @summary This test tries to stress direct handshakes between threads while suspending them. * @library /testlibrary /test/lib * @build HandshakeDirectTest * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+SafepointALot -XX:BiasedLockingDecayTime=100000000 -XX:BiasedLockingBulkRebiasThreshold=1000000 -XX:BiasedLockingBulkRevokeThreshold=1000000 HandshakeDirectTest */
*** 101,109 **** workingThreads[i] = new Thread(test, Integer.toString(i)); workingThreads[i].setDaemon(true); workingThreads[i].start(); } // Wait until the desired number of direct handshakes is reached ! workingThreads[0].join(); } } --- 101,130 ---- workingThreads[i] = new Thread(test, Integer.toString(i)); workingThreads[i].setDaemon(true); workingThreads[i].start(); } + // Fire-up suspend-resume thread + Thread suspendResumeThread = new Thread() { + @Override + public void run() { + while (true) { + int i = ThreadLocalRandom.current().nextInt(0, WORKING_THREADS-1); + workingThreads[i].suspend(); + try { + Thread.sleep(1); // sleep for 1 ms + } catch(InterruptedException ie) { + } + workingThreads[i].resume(); + } + } + }; + suspendResumeThread.setDaemon(true); + suspendResumeThread.start(); + // Wait until the desired number of direct handshakes is reached ! // and check that all workers exited ! for (int i = 0; i < WORKING_THREADS; i++) { ! workingThreads[i].join(); ! } } }
< prev index next >