即使没有阻塞方法,Java Thread.isInterrupted()也会返回false

时间:2017-02-23 19:21:37

标签: java android concurrency interrupt

我一直在使用java线程,我对Thread.interrupt()行为感到困惑。正如我从this ibm article那里学到的,如果一个线程在调用sleep()时正在执行一些阻塞方法(如interrupt()),则会抛出异常并且{{1将要清除标志(设置为interrrupted)。但是如果没有执行这样的阻塞方法,那么false标志将是真的,所以我可以在打破无限循环的条件下使用它。

问题在于它实际上并不是这样运作的。当我在要停止的线程上调用interrrupted时,除了在无限循环中显示日志之外什么都不做(所以没有interrupt()sleep()),循环没有'因为wait()返回false,所以真的停止了。为什么会这样?这是一些代码示例:

isInterrupted()
即使在致电exoPlayer.addListener(new ExoPlayer.EventListener() { Thread positionChecker; @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { Log.d("TAG", "onPlayerStateChanged"); if (playbackState == ExoPlayer.STATE_READY) { if (playWhenReady) { positionChecker = new Thread() { @Override public void run() { while (!isInterrupted()) { Log.d("TAG", "isInterrupted = " + isInterrupted()); } } }; positionChecker.start(); } if (!playWhenReady) { if (positionChecker != null) { Log.d("TAG", "Interrupting the thread"); positionChecker.interrupt(); } } } } }

之后,

Log.d("TAG", "isInterrupted = " + isInterrupted());始终会打印“isInterrupted = false”

0 个答案:

没有答案