给定上述Java代码,在不考虑异常捕获的情况下,下列哪种情况是程序输出结果的可能之一(假设线程调度具有不确定性)?
答案解析
本题考察线程的启动、join()方法以及线程调度的不确定性。
A选项错误,join()方法调用后,主线程(main)会被阻塞,直到t1线程执行完毕,因此“当前执行的线程为:main”这行输出在t1线程执行完毕之后。
B选项错误,join()方法的作用是在主线程执行到i=2时,阻塞主线程,等待t1线程执行完毕,所以“当前执行的线程为:main”这行输出不应该在t1线程执行之前出现。
C选项错误,join()方法调用后,主线程(main)会被阻塞,直到t1线程执行完毕,并且在join调用之前,主线程已经输出了main线程运行了0次和main线程运行了1次,不可能在t1线程结束后再输出main线程运行了2次。
D选项正确,主线程先输出main线程运行了0,1,2次,然后遇到join方法,t1线程开始执行,执行完后主线程继续执行,输出main线程运行了3,4次。线程的调度具有不确定性,t1线程开始执行前,主线程可能已经输出了前三次,所以可以这样输出。
正确答案:D