/** * */ package com.github.cbpos1989.examples.threads; /** * @author User1 * */ public class ThreadApp { public static void threadMessage(String message){ String threadName = Thread.currentThread().getName(); System.out.format("%s: n%n", threadName, message); } private static class MessageLoop implements Runnable{ public void run(){ String[] importantInfo = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" }; try{ for(int i = 0;i < importantInfo.length; ++i){ Thread.sleep(2000); threadMessage(importantInfo[i]); } } catch(InterruptedException ie) { threadMessage("I wasn't done!"); } } } public static void main(String[] args) throws InterruptedException{ long patience = 1000 * 60 * 60; if(args.length < 0){ try{ patience = Long.parseLong(args[0]) * 1000; } catch(NumberFormatException nfe) { System.err.println("Argument must be an integer."); System.exit(1); } } threadMessage("Starting MessageLoop Thread"); long startTime = System.currentTimeMillis(); Thread t = new Thread(new MessageLoop()); t.start(); threadMessage("Waiting for MessageLoop Thread to finish"); while(t.isAlive()){ threadMessage("Still Waiting..."); t.join(1000); if(((System.currentTimeMillis() - startTime) < patience) && t.isAlive()){ threadMessage("Tired of waiting"); t.interrupt(); t.join(); } threadMessage("Finally!"); } } }