2010-08-30 64 views
0

我會盡量縮短。java:線程的新手。這可能嗎?

需要多個線程來打開套接字(每個線程打開一個套接字)並創建HTTP請求。我是新來的多線程,我不知道這是否可能,因爲每個線程必須運行,直到請求完成(我認爲)。

[評論後編輯]

我不知道這是可能的,因爲當前運行的線程可以在響應被取暫停。

感謝您的任何幫助。

+0

簡短的問題,簡短的回答:是的,這是可能的 – PeterMmm 2010-08-30 15:09:43

+1

感謝的人。我只是想知道這是怎麼可能的,因爲每個線程都可以進入可運行狀態並在獲取響應之前暫停它的操作..... – Andreas 2010-08-30 15:12:18

+0

抱歉沒有在q – Andreas 2010-08-30 15:12:35

回答

1

是的,這是可能的。

3

是的,絕對有可能。

在回答您的另一詢問

,一個線程被掛起不會通過套接字recieving數據阻止它的事實。如果任何數據在線程掛起時到達,它將排隊直到線程恢復。

+0

+1中找出OP要求的內容,儘管他沒有問。老師的標誌! – Pete 2010-08-31 14:53:31

2

是的,你所描述的是在通過HTTP檢索數據的java程序中非常典型的。

3

你說的「暫停」是什麼意思?如果您參考了線程之間的上下文切換,那麼您在理解多線程時會遇到一些漏洞。它與操作系統中的多任務處理相同:您在機器上同時運行Word和Explorer,並且一個應用程序在另一個應用程序需要運行時不會死亡 - 操作系統會將一個進程/線程通過保存所有狀態進入等待狀態,然後檢索下一個線程的所有狀態,然後將其設置爲運動狀態。這個來回的速度如此之快,以至於它們看起來像是同時運行 - 但在單處理器的機器上,只有一個線程在任何特定的時間運行。

線程本身並不「知道」這個 - 只有當它在一個緊密的循環中連續運行來檢查時間時,它纔會注意到時間顛簸:時間在幾毫秒內平穩增加,但突然時間跳躍前進,然後仍然平穩地運行一組新的毫秒。跳轉是在另一個線程正在運行時。每個這樣的平穩運行時期稱爲time slice量子。但是如果線程不需要處理器,例如當它等待I/O時,OS會在時間片結束之前將其取回。

當你從run()方法退出/返回時,線程退出(死亡) - 之前沒有。

對於獲取多個HTTP連接,多線程是理想的:線程將使用等待網絡上傳入字節的大部分時間 - 當它等待時,操作系統知道這一點,並將線程掛入「IO等待」而是同時運行其他線程(或者如果沒有線程需要運行,就會浪費週期,例如,每個人都在等待IO - 或者在這些日子裏,處理器會減速)。

+0

謝謝stolsvik – Andreas 2010-08-31 00:28:12