java 多线程之join

来源:互联网 发布:淘宝代运营哪家好 编辑:程序博客网 时间:2024/05/21 10:36

t.join();表示当前线程停止执行直到t线程运行完毕;

t.join(1000); 表示当前线程等待t线程运行1000后执行;

package org.thread;/** * t.join()表示当前线程停止执行直到t线程运行完毕 * t.join(1000);表示当前线程等待t线程运行1000后执行 * @author  * */public class JoinTestDemo2 {    public static void main(String[] args) throws InterruptedException{        //Delay,in milliseconds before we interrupt MessageLoop        //thread(default one hour)        long patience = 1000 * 60 * 60;                //if command line argument present,gives patience inseconds        if(args.length>0){            try {                patience = Long.parseLong(args[0])*1000;            } catch (Exception e) {                System.out.println("Argument must be a integer");                System.exit(1);            }        }                threadMessage("start MessageLoop thread");        long startTime = System.currentTimeMillis();        Thread t = new Thread(new MessageLoop());        t.start();                threadMessage("waiting for messageLoop thread to finish");        //loop until MessageLoop thread exits        while(t.isAlive()){            threadMessage("still waiting");                        //wait maxium of 1 second for MessageLoop thread to finish                        t.join();            //t.join(1000);                         if (((System.currentTimeMillis() - startTime) > patience) &&t.isAlive()){                 threadMessage("Tired of waiting!");                 t.interrupt();                                  //Should't be long now --wait indefinitely                 t.join();                            }        }        threadMessage("Finally!");    }        /*Create a new instance of Test*/    public JoinTestDemo2(){            }        /*Display a message,preceded by the name of the current thread*/    static void threadMessage(String message){        String threadName = Thread.currentThread().getName();                System.out.format("%s:%s%n",threadName,message);            }        private static class MessageLoop implements Runnable{        @Override        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++){                    //Pause for 4 seconds                    Thread.sleep(4000);                                        //print a message                    threadMessage(importantInfo[i]);                }            } catch (Exception e) {                threadMessage("I was't done!");            }                    }            }            }


上述不同代码的运行结果:

颜色对应

init:
deps-jar:
Compiling 1 source file to D:/test/desPatten/build/classes
compile-single:
run-single:
main: Starting MessageLoop thread
main: Waiting for MessageLoop thread to finish
main: Still waiting...
Thread-0: Mares eat oats
Thread-0: Does eat oats
Thread-0: Little lambs eat ivy
Thread-0: A kid will eat ivy too
main: Finally!
生成成功(总时间:17 秒)

init:
deps-jar:
Compiling 1 source file to D:/test/desPatten/build/classes
compile-single:
run-single:
main: Starting MessageLoop thread
main: Waiting for MessageLoop thread to finish
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: Mares eat oats
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: Does eat oats
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: Little lambs eat ivy
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: A kid will eat ivy too
main: Finally!
生成成功(总时间:17 秒)
0 0