先看一下推荐的方法暂停线程。
package thread;
public class MyThread extends Thread {
@Override
public void run() {
// super.run();
try {
for (int i = 0; i < 500000; i++) {
if (this.interrupted()) {//一直检查有没有被打断
System.out.println("已经是停止状态了!我要退出了!");
throw new InterruptedException();
}
System.out.println("i=" + (i + 1));
}
System.out.println("我在for下面");
} catch (InterruptedException e) {
System.out.println("进MyThread.java类run方法中的catch了!");
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
MyThread thread = new MyThread();
thread.start();
Thread.sleep(2000);
thread.interrupt();//这里置了标志位
} catch (InterruptedException e) {
System.out.println("main catch");
e.printStackTrace();
}
System.out.println("end!");
}
}
这就是中断异常法
- interrupt()
interrupt方法用于中断线程。调用该方法的线程的状态为将被置为”中断”状态。
注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出interruptedException的方法)就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态”,就会抛出中断异常。 - interrupted() 和 isInterrupted()
首先看一下API中该方法的实现:
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
private native boolean isInterrupted(boolean ClearInterrupted);
因此这两个方法有两个主要区别:
interrupted 是作用于当前线程,isInterrupted 是作用于调用该方法的线程对象所对应的线程。(线程对象对应的线程不一定是当前运行的线程。例如我们可以在A线程中去调用B线程对象的isInterrupted方法,而interrupted则是只能判断当前线程有没有被打断)
sleep方法的描述
void java.lang.Thread.sleep(long millis) throws InterruptedException
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.Parameters:
millis the length of time to sleep in milliseconds
Throws:
IllegalArgumentException - if the value of millis is negative
InterruptedException - if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
大概意思是会让线程暂停执行指定的时间,并且不会释放调锁。
而且如果受到线程的打断,他会抛出异常并且置标志位。
本文详细介绍了Java中线程中断机制的实现原理与使用方法,包括如何通过interrupt()方法中断线程,以及如何利用interrupted()和isInterrupted()方法来检查线程是否已被中断。同时,还探讨了sleep方法在遇到线程中断时的行为。
1485

被折叠的 条评论
为什么被折叠?



