Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Date;
- import java.util.concurrent.atomic.AtomicInteger;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- public class Main {
- public static void main(String[] args) {
- for (int k = 0; k < 50; k++) {
- int numberOfThreads = k % 2 + 1;
- Date d1 = new Date();
- MyRunnable.numberOfThreads = numberOfThreads;
- MyRunnable.counter = new AtomicInteger(numberOfThreads);
- Thread[] threads = new Thread[numberOfThreads];
- for (int i = 0; i < threads.length; i++)
- threads[i] = new Thread(new MyRunnable());
- MyRunnable.threads = threads;
- for (int i = 0; i < threads.length; i++)
- threads[i].start();
- for (int i = 0; i < threads.length; i++) {
- try {
- threads[i].join();
- } catch (InterruptedException ex) {
- Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- Date d2 = new Date();
- System.out.println("" + numberOfThreads + " Thread(s): " + (d2.getTime() - d1.getTime()) + "ms.");
- MyRunnable.counter = null;
- MyRunnable.numberOfThreads = 0;
- MyRunnable.threads = null;
- }
- }
- private static class MyRunnable implements Runnable {
- public static AtomicInteger counter = null;
- public static int numberOfThreads = 0;
- public static Thread[] threads = null;
- @Override
- public void run() {
- for (int i = 0; i < 1000000; i++) {
- int k = 1;
- for (int j = 0; j < 1000000 / numberOfThreads; j++)
- k *= j;
- if (counter.decrementAndGet() == 0) {
- counter.set(numberOfThreads);
- for (int j = 0; j < threads.length; j++)
- threads[j].interrupt();
- }
- while (!Thread.interrupted()) {}
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement