// // Simple thread demo in Java. The main declares a certain amount of // "resources" (just an integer number) then starts two threads which // "work through" the resources (mostly by printing that they did). // The Java thread interface is much cleaner than the standard pthreads // interface used in C. // import java.io.*; import java.util.*; public class thrd { static private int depot; // Shared data. // This is the class static class ThrdInfo extends Thread { String topr; // What to print. int low, high; // Random range. Random rand = new Random(); // Random number generator. ThrdInfo(String _topr, int _low, int _high) { topr = _topr; low = _low; high = _high; } // Get the resource. (Note the sychnronized keyword.) public synchronized int get_resource(int amt) { if(depot < amt) amt = depot; depot -= amt; return amt; } // This is the function run in the thread. public void run() { while(true) { // Choose a random number in range. int amt = rand.nextInt(high - low + 1) + low; // Remove that amount from the resource depot. amt = get_resource(amt); // When the resource is exhausted, we're done. if(amt == 0) return; // Do that much "work." while(amt-- > 0) { System.out.print("["+topr+"]"); System.out.flush(); } System.out.println(); System.out.flush(); } } } public static void main(String args[]) throws IOException, InterruptedException { // Create the two thread objects. ThrdInfo th1 = new ThrdInfo("Z", 14, 18); ThrdInfo th2 = new ThrdInfo("EE", 8, 12); // Fill the resource depot and start the the threads running. depot = 3000; th1.start(); th2.start(); // Wait for each of them to be done. th1.join(); System.out.println("First Done"); System.out.flush(); th2.join(); System.out.println("Second Done"); System.out.flush(); } }