如何用Java多线程打开网络连接?

如何用Java多线程打开网络连接?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我正在从事一个多线程Java项目,我的一个线程正在联系一个网页。目前,我的做法如下: URLConnection urlConn = webPageToContact.openConnection(); InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream()); BufferedReader buff = new BufferedReader(inStream); 我的问题是,有没有一种方法可以通

我正在从事一个多线程Java项目,我的一个线程正在联系一个网页。目前,我的做法如下:

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的生命周期。