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 秒)
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 秒)