我的问题很简单,比如如下的线程方法:
for(int i=0;i<100000;i++)
{
System.out.println("ssssssssssss");
}
它是做一个循环,但是我调用了interrupt方法,该线程没有被中断。我知道可以在循环中加变量,控制循环的中断。
但是我们的线程方法往往比这个要复杂的多,比如里面有网络操作或者IO操作,
这些都是非常耗时的,所以当线程正在做这些操作的时候,有没有办法中断线程,
抛出InterruptedException异常。
for(int i=0;i<100000;i++)
{
System.out.println("ssssssssssss");
}
它是做一个循环,但是我调用了interrupt方法,该线程没有被中断。我知道可以在循环中加变量,控制循环的中断。
但是我们的线程方法往往比这个要复杂的多,比如里面有网络操作或者IO操作,
这些都是非常耗时的,所以当线程正在做这些操作的时候,有没有办法中断线程,
抛出InterruptedException异常。
if (ready()) {
System.out.println("ssssssssssss");
}
}boolean ready() {
if (...) { // 判断一个变量,如果没有其他占用,通过这个变量直接占用
return true;
} synchronized(lock) {
// 锁定,等待许可,可以用wait()之类。
}
}
直接throws new Exception();
那我该在什么地方throws new Exception()呢?
你说你没有抛出,那说明你并没有用到阻塞的方法
2:方法在等待锁的同时,被其他线程将该线程中断,这时等待会抛出 InterruptedException,处理一下这个异常便可中断该线程。其中方法 1 不适合用于在 while 循环中会产生阻塞的代码,比如有个阻塞等列在那里阻塞了,这个 while 就不会再运行了,监视变量因此也形同虚设。存在这种情况时应使用方法 2。