001 //package edu.unima.ky.parallel;
002
003 /**
004 * Hallo Welt Thread.
005 * Multi threaded application processing and displaying "names" from
006 * threads while threads are sleeping for a random time.
007 * @author Heinz Kredel.
008 */
009 public class HalloWeltThread {
010
011 public static void main(String[] args) {
012
013 String name = "Kily";
014 if (args.length > 0 ) {
015 name = args[0];
016 }
017
018 for (int i = 0; i < 1; i++ ) {
019 System.out.println("Creating Threads ... ");
020 Thread t1 = new Thread( new Tuwas("Michael") );
021 Thread t2 = new Thread( new Tuwas("Karl") );
022 Thread t3 = new Thread( new Tuwas(name) );
023
024 System.out.println("Starting Threads ... ");
025 t1.start(); t2.start(); t3.start();
026
027 System.out.println("Waiting on Threads to terminate ... ");
028 /* test ohne join */
029 try {
030 t1.join(); t2.join(); t3.join();
031 } catch(Exception e) {
032 System.out.println("Dies sollte nicht passieren "+e);
033 }
034 /* */
035 System.out.println("Threads joined");
036 //System.exit(0); // test
037 }
038 }
039
040 }
041
042 /**
043 * Object to be executed in a Thread.
044 */
045 class Tuwas implements Runnable {
046
047 String var = "";
048
049 /**
050 * Konstructor.
051 * @param v A String, the desired name.
052 */
053 public Tuwas(String v) {
054 var = v;
055 }
056
057 /**
058 * Runs five times per thread but sleeping a random time.
059 */
060 public void run() {
061 for (int k = 0; k < 5; k++) {
062 Work.schaffen(100);
063 System.out.println("Hi " + var + " zum " + k + "-ten");
064 }
065 }
066
067 }
068
069 /**
070 * Random delay by working.
071 */
072 class Work {
073
074 /**
075 * Random delay.
076 * @param max the desired delay in ms.
077 */
078 public static void schaffen(int max) {
079 try {
080 Thread.currentThread().sleep( (int)(max*Math.random()) );
081 } catch (InterruptedException e) {
082 System.out.println("Dies sollte nicht passieren "+e);
083 }
084
085 }
086
087 }