codeegginterviewgroup / CodeEggDailyInterview

码个蛋每日面试题
393 stars 55 forks source link

如何停止一个正在运行的线程 #186

Open kukyxs opened 4 years ago

kukyxs commented 4 years ago

使用共享变量的方式 在这种方式中,之所以引入共享变量, 是因为该变量可以被多个执行相同任务的线程用来作为是否中断的信号,通知中断线程的执行。 使用interrupt方法终止线程 如果一个线程由于等待某些事件的发生而被阻塞, 比如当一个线程调用Thread.join()方法,或者Thread.sleep()方法, 在网络中调用ServerSocket.accept()方法时,都有可能导致线程阻塞,即使主程序中将该线程的共享变量设置为true,但该线程此时根本无法检查循环标志,当然也就无法立即中断。 使用Thread提供的interrupt()方法,该方法不会中断一个正在运行的线程,但是它可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码