/**
*
*/
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!");
}
}
}