Advertisement
Guest User

Untitled

a guest
Jul 1st, 2011
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.67 KB | None | 0 0
  1. import java.util.Date;
  2. import java.util.concurrent.atomic.AtomicInteger;
  3. import java.util.logging.Level;
  4. import java.util.logging.Logger;
  5.  
  6. public class Main {
  7.  
  8.     public static void main(String[] args) {
  9.  
  10.         for (int k = 0; k < 50; k++) {
  11.  
  12.             int numberOfThreads = k % 2 + 1;
  13.             Date d1 = new Date();
  14.             MyRunnable.numberOfThreads = numberOfThreads;
  15.             MyRunnable.counter = new AtomicInteger(numberOfThreads);
  16.             Thread[] threads = new Thread[numberOfThreads];
  17.             for (int i = 0; i < threads.length; i++)
  18.                 threads[i] = new Thread(new MyRunnable());
  19.             MyRunnable.threads = threads;
  20.             for (int i = 0; i < threads.length; i++)
  21.                 threads[i].start();
  22.             for (int i = 0; i < threads.length; i++) {
  23.                 try {
  24.                     threads[i].join();
  25.                 } catch (InterruptedException ex) {
  26.                     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
  27.                 }
  28.             }
  29.             Date d2 = new Date();
  30.             System.out.println("" + numberOfThreads + " Thread(s): " + (d2.getTime() - d1.getTime()) + "ms.");
  31.             MyRunnable.counter = null;
  32.             MyRunnable.numberOfThreads = 0;
  33.             MyRunnable.threads = null;
  34.         }
  35.     }
  36.  
  37.     private static class MyRunnable implements Runnable {
  38.  
  39.         public static AtomicInteger counter = null;
  40.         public static int numberOfThreads = 0;
  41.         public static Thread[] threads = null;
  42.  
  43.         @Override
  44.         public void run() {
  45.  
  46.             for (int i = 0; i < 1000000; i++) {
  47.  
  48.                 int k = 1;
  49.                 for (int j = 0; j < 1000000 / numberOfThreads; j++)
  50.                     k *= j;
  51.  
  52.                 if (counter.decrementAndGet() == 0) {
  53.  
  54.                     counter.set(numberOfThreads);
  55.                    
  56.                     for (int j = 0; j < threads.length; j++)
  57.                         threads[j].interrupt();
  58.                 }
  59.  
  60.                 while (!Thread.interrupted()) {}
  61.             }
  62.         }
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement