如何用Java多线程打开网络连接?
我正在从事一个多线程Java项目,我的一个线程正在联系一个网页。目前,我的做法如下:如何用Java多线程打开网络连接?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我正在从事一个多线程Java项目,我的一个线程正在联系一个网页。目前,我的做法如下: URLConnection urlConn = webPageToContact.openConnection(); InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream()); BufferedReader buff = new BufferedReader(inStream); 我的问题是,有没有一种方法可以通
URLConnection urlConn = webPageToContact.openConnection();
InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream());
BufferedReader buff = new BufferedReader(inStream);
我的问题是,有没有一种方法可以通过线程的方式来实现这一点,这样当这个线程在等待服务器响应时,我的项目中的其他线程就可以做一些事情了。我在想某种“等待”的方法。谢谢 试试这个:
Thread webReader = new Thread(){
public void run(){
URLConnection urlConn = webPageToContact.openConnection();
InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream());
BufferedReader buff = new BufferedReader(inStream);
}
});
webReader.setDaemon(true);
webReader.start();
您还可以使用单线程池执行器:
ExecutorService service = Executors.newSingleThreadExecutor();
service.submit(new Runnable() {
@Override public void run() {
URLConnection urlConn = webPageToContact.openConnection();
InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream());
BufferedReader buff = new BufferedReader(inStream);
// put data in queue or some other data structure
}
});
service.shutdown();
这忙是在联系服务器时等待,还是在服务器处于睡眠状态,然后在响应返回时唤醒?@nosretap这对您有什么影响?为什么不使用executor框架呢?@MouseEvent因为忙是等待与睡眠在不同情况下有不同的优缺点。嗯?在执行时,所有其他线程都可能已经在执行某些操作。您的问题是什么?是的,但是每次执行应用程序时,执行器只需启动一次,并重新用于网页加载(我想有几个)您是否试图将其用作应用程序的请求侦听器?代码段中使用单线程执行器是有原因的,还是出于演示目的?实际使用线程或执行器取决于您的要求。所以这只是为了举例说明。如果您的应用程序中有一些其他逻辑可以重用executor.Add close()到sample,以澄清buff的生命周期。