141 live[i] = true;
142 allThreads[i] = new MyThread(i);
143 allThreads[i].setDaemon(true);
144 allThreads[i].start();
145 }
146 }
147 // wait until all threads have started.
148 barrier.await();
149
150 // get peak thread count after daemon threads have started
151 long peak2 = mbean.getPeakThreadCount();
152
153 System.out.println(" Current = " + mbean.getThreadCount() +
154 " Peak before = " + peak1 + " after: " + peak2);
155
156 if (peak2 != (peak1 + delta)) {
157 throw new RuntimeException("Current Peak = " + peak2 +
158 " Expected to be == previous peak = " + peak1 + " + " +
159 delta);
160 }
161 // wait until the current thread count gets incremented
162 while (mbean.getThreadCount() < (current + count)) {
163 Thread.sleep(100);
164 }
165 current = mbean.getThreadCount();
166 System.out.println(" Live thread count before returns " + current);
167 return current;
168 }
169
170 private static long terminateThreads(int from, int count) throws InterruptedException {
171 // get current peak thread count
172 long peak1 = mbean.getPeakThreadCount();
173
174 // Stop daemon threads and wait to be sure they all are dead
175 System.out.println("Terminating " + count + " threads....");
176 barrier.set(count);
177 synchronized(live) {
178 for (int i = from; i < (from+count); i++) {
179 live[i] = false;
180 }
181 live.notifyAll();
182 }
183 // wait until daemon threads terminated.
184 barrier.await();
185
186 // get peak thread count after daemon threads have terminated
187 long peak2 = mbean.getPeakThreadCount();
188 // assuming no system thread is added
189 if (peak2 != peak1) {
190 throw new RuntimeException("Current Peak = " + peak2 +
191 " Expected to be = previous peak = " + peak1);
192 }
193
194 for (int i = from; i < (from+count); i++) {
195 allThreads[i].join();
196 }
197
198 // there is a race in the counter update logic somewhere causing
199 // the thread counters go ff
200 // we need to give the terminated threads some extra time to really die
201 // JDK-8021335
202 Thread.sleep(500);
203
204 long current = mbean.getThreadCount();
205 System.out.println(" Live thread count before returns " + current);
206 return current;
207 }
208
209 private static void resetPeak(long expectedCount) {
210 long peak3 = mbean.getPeakThreadCount();
211 long current = mbean.getThreadCount();
212
213 // Nightly testing showed some intermittent failure.
214 // Check here to get diagnostic information if some strange
215 // behavior occurs.
216 checkThreadCount(expectedCount, current, 0);
217
218 // Reset peak thread count
219 mbean.resetPeakThreadCount();
220
221 long afterResetPeak = mbean.getPeakThreadCount();
222 long afterResetCurrent = mbean.getThreadCount();
|
141 live[i] = true;
142 allThreads[i] = new MyThread(i);
143 allThreads[i].setDaemon(true);
144 allThreads[i].start();
145 }
146 }
147 // wait until all threads have started.
148 barrier.await();
149
150 // get peak thread count after daemon threads have started
151 long peak2 = mbean.getPeakThreadCount();
152
153 System.out.println(" Current = " + mbean.getThreadCount() +
154 " Peak before = " + peak1 + " after: " + peak2);
155
156 if (peak2 != (peak1 + delta)) {
157 throw new RuntimeException("Current Peak = " + peak2 +
158 " Expected to be == previous peak = " + peak1 + " + " +
159 delta);
160 }
161 current = mbean.getThreadCount();
162 System.out.println(" Live thread count before returns " + current);
163 return current;
164 }
165
166 private static long terminateThreads(int from, int count) throws InterruptedException {
167 // get current peak thread count
168 long peak1 = mbean.getPeakThreadCount();
169
170 // Stop daemon threads and wait to be sure they all are dead
171 System.out.println("Terminating " + count + " threads....");
172 barrier.set(count);
173 synchronized(live) {
174 for (int i = from; i < (from+count); i++) {
175 live[i] = false;
176 }
177 live.notifyAll();
178 }
179 // wait until daemon threads terminated.
180 barrier.await();
181
182 // get peak thread count after daemon threads have terminated
183 long peak2 = mbean.getPeakThreadCount();
184 // assuming no system thread is added
185 if (peak2 != peak1) {
186 throw new RuntimeException("Current Peak = " + peak2 +
187 " Expected to be = previous peak = " + peak1);
188 }
189
190 for (int i = from; i < (from+count); i++) {
191 allThreads[i].join();
192 }
193
194 long current = mbean.getThreadCount();
195 System.out.println(" Live thread count before returns " + current);
196 return current;
197 }
198
199 private static void resetPeak(long expectedCount) {
200 long peak3 = mbean.getPeakThreadCount();
201 long current = mbean.getThreadCount();
202
203 // Nightly testing showed some intermittent failure.
204 // Check here to get diagnostic information if some strange
205 // behavior occurs.
206 checkThreadCount(expectedCount, current, 0);
207
208 // Reset peak thread count
209 mbean.resetPeakThreadCount();
210
211 long afterResetPeak = mbean.getPeakThreadCount();
212 long afterResetCurrent = mbean.getThreadCount();
|