上面的程序中,守护线程由下载子线程创建,守护下载子线程。当守护线程发现下载线程超时之后,就会终止下载线程,然后通知主线程再重新创建一个下载线程继续之前的下载,然后这个守护线程会随着要终止的下载线程一起结束。一对新的下载线程和守护线程继续当前的下载任务。
但是上面的程序在下载完成之后并不会退出,因为主线程还在wait()中。所有的下载子线程和守护线程均退出。
从这里可以得出一个结论:
1、object.wait()和object.notify必须在synchronized(object){}代码块中执行,否则会报java.lang.IllegalMonitorStateException异常
2、一个线程wait()之后并不会结束。并且守护它的守护线程也不会结束。
3、主线程也可以wait()
4、主线程出现crash崩溃了之后,主线程开启的子线程会继续执行。由主线程产生的守护线程会守护主线程产生的子线程。