当前代码无法获取到阻塞状态 只有RUNNABLE、TERMINATED
如何获取等待链接响应和资源响应的空档期? 我想在等待资源时去再开同样的线程直到一直有资源不断响应方才中止
测试类
package runing;
import java.util.Formatter;
import java.util.logging.Logger;
public class Test {
public static void main(String[] args) throws InterruptedException {
//ExecutorService exec = Executors.newSingleThreadExecutor();
final Logger log = Logger.getLogger(String.valueOf(String.class));
MaThread maThread = new MaThread(1);
maThread.start();
Thread.State state = maThread.getState();
do {
state = maThread.getState();
if (state != Thread.State.RUNNABLE && state != Thread.State.TERMINATED) {
log.info(new Formatter().format("状态:%s ;", state).toString());
}
} while (state != Thread.State.TERMINATED);
// IntStream.range(0, 1).mapToObj(MaThread::new).forEach(thread1 -> thread1.start());
}
}
线程类:用独立线程获取网络请求
package runing;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class MaThread extends Thread {
final Logger log = Logger.getLogger(String.valueOf(String.class));
public static int index = 0;
MaThread(int i) {
}
@Override
public void run() {
try {
URL realUrl = new URL("http://www.baidu.com");
try {
URLConnection connection = realUrl.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
String res = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining(System.lineSeparator()));
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
log.info(e.getMessage());
}
}
}

大概明白问题的意思,是想着在 IO 阻塞期间开个新线程,同时获取到阻塞结束的事件吧。可以这么做,将你这段 URLConn 的代码,用一个 Callable 子线程执行,丢到线程池里跑,然后在另一个线程中调用这个 Future.get(),这不就能拿到请求完成的事件了?