/** * Simple program using threads. * */ /** * class Counter is runnable, so we can turn a counter object into * a thread (the run() method is run when this happens). * * This class assigns unique ids to each Counter object, and the run * method just counts to ten. Try using each of the run methods * (rename the one you want to be executed to "run()" ) to see what * happens to the thread scheduling */ class Counter implements Runnable { static int id=0; int myid; int x; public Counter() { myid = id++; x=0; } // this run is used to see what happens (to scheduling) when the // threads don't wait for anything (and never call yield). public void run1() { while (x<10) { System.out.println("Counter["+myid + "]: value is " + x ); x++; } } // name this one run() to see what happens when each thread goes // to sleep regularly. public void run() { try { while (x<10) { System.out.println("Counter["+myid + "]: value is " + x ); x++; // let another thread run Thread.currentThread().yield(); } // uncomment this to see how having any thread alive keeps // the program from quitting if (myid==0) { System.out.println("I refuse to die!"); while (true) { // wait 100 ms. Thread.currentThread().sleep(100); } } } catch (InterruptedException ie) { ie.printStackTrace(); } } } class ThreadPlay { // creates 5 counter threads and sets them running. public static void main(String [] args) { for (int i=0;i<5;i++) { Thread t = new Thread( new Counter()); t.start(); System.out.println("Started thread " + i ); } System.out.println("main is done - goodbye"); } }