2012-12-02 73 views
-1

我正在開發一個多線程的Java項目,我的一個線程正在聯繫一個網頁。目前,我這樣做如下:如何在Java中多線程打開網絡連接?

URLConnection urlConn = webPageToContact.openConnection(); 
InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream()); 
BufferedReader buff = new BufferedReader(inStream); 

我的問題是,有沒有辦法做到這一點在一個線程的方式,這樣雖然這個線程在等待服務器的響應,在我的項目其他線程可以做東西。我正在考慮某種「等待」方法。謝謝!

+0

嗯?所有其他線程在執行時已經可以做些事情了。你有什麼問題? – EJP

回答

1

試試這個:

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(); 
+0

當服務器被聯繫時它會忙着等待還是睡着,然後在響應返回時喚醒? – Nosrettap

+0

@Nosrettap這對你有什麼不同? – Mordechai

+0

爲什麼不使用executor框架呢? –

3

你也可以使用一個單獨的線程池執行人:

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(); 
+0

是的,但執行程序必須每次執行應用程序只啓動一次,並重新用於網頁加載(我想有幾個) – Aubin

+0

您是否試圖將此作爲您的應用程序的請求偵聽器? –

+0

單線程執行程序在您的代碼片段中使用還是出於說明目的? –

相關問題