addShutdownHook()和Thread.currentThread().join()

1.addShutDownHook(thread1)意思是指thread1是jvm停止前最后执行的线程,无论前面有多少线程,这一线程都是最后执行的。

package runtime;

public class ShutdownHook {
	public static void main(String[] args) {
		Thread t1 = new Thread(){
			@Override
			public void run() {
				System.out.println("thread1");;
			}
		};
		Thread t2 = new Thread(){
			@Override
			public void run() {
				System.out.println("thread2");;
			}
		};
		Runtime.getRuntime().addShutdownHook(new Thread(){
			@Override
			public void run() {
				System.out.println("shutdown");;
			}
		});
		
		t1.start();
		t2.start();
	}
}

上面代码会输出thread1

                        thread2

                        shutdown

                    或thread2

                        thread1

                        shutdown


2.Thread.currentThread().join(), thread1.join()本意现指先执行thread1,再执行其他线程。用在当前前程时,表明当前线程一直等待下去,只有当前线程死掉,才会退出执行当前线程。具体解释参见

http://stackoverflow.com/questions/5999595/thread-join-on-itself

原解释如下:

It happens out that the join() method uses the isAlive() method to determine when to return from the join() method. In the current implementation, it also does not check to see if the thread is joining itself.
In other words, the join() method returns when and only when the thread is no longer alive. This will have the effect of waiting forever.



你可能感兴趣的:(addShutdownHook()和Thread.currentThread().join())