| // Many threads join a single thread. |
| |
| class Sleeper implements Runnable |
| { |
| int num = -1; |
| |
| public Sleeper(int num) |
| { |
| this.num = num; |
| } |
| |
| public void run() |
| { |
| System.out.println("sleeping"); |
| try |
| { |
| Thread.sleep(500); |
| } |
| catch (InterruptedException x) |
| { |
| System.out.println("sleep() interrupted"); |
| } |
| System.out.println("done"); |
| } |
| } |
| |
| class Joiner implements Runnable |
| { |
| Thread join_target; |
| |
| public Joiner(Thread t) |
| { |
| this.join_target = t; |
| } |
| |
| public void run() |
| { |
| try |
| { |
| long start = System.currentTimeMillis(); |
| join_target.join(2000); |
| if ((System.currentTimeMillis() - start) > 1900) |
| System.out.println("Error: Join timed out"); |
| else |
| System.out.println("ok"); |
| } |
| catch (InterruptedException x) |
| { |
| System.out.println("join() interrupted"); |
| } |
| } |
| |
| } |
| |
| public class Thread_Join |
| { |
| public static void main(String[] args) |
| { |
| Thread primary = new Thread(new Sleeper(1)); |
| primary.start(); |
| for (int i=0; i < 10; i++) |
| { |
| Thread t = new Thread(new Joiner(primary)); |
| t.start(); |
| } |
| } |
| } |