我正在爲我的作業編寫代碼,我對編寫多線程應用程序並不太熟悉。我學會了如何打開一個線程並啓動它。我更好地展示代碼。Java多線程,如何停止?
for (int i = 0; i < a.length; i++) {
download(host, port, a[i]);
scan.next();
}
我上面的代碼連接到服務器打開a.length
多個並行請求。換句話說,下載將打開a[i]
連接,以在每次迭代中獲取相同的內容。但是,我希望我的服務器在i = 0
完成下載方法並開始下一次迭代i = 1
,此時已下載的線程已打開完成。我用scan.next()手動完成,但顯然這不是一個好的解決方案。我怎樣才能做到這一點?
編輯:
public static long download(String host, int port) {
new java.io.File("Folder_" + N).mkdir();
N--;
int totalLength = length(host, port);
long result = 0;
ArrayList<HTTPThread> list = new ArrayList<HTTPThread>();
for (int i = 0; i < totalLength; i = i + N + 1) {
HTTPThread t;
if (i + N > totalLength) {
t = (new HTTPThread(host, port, i, totalLength - 1));
} else {
t = new HTTPThread(host, port, i, i + N);
}
list.add(t);
}
for (HTTPThread t : list) {
t.start();
}
return result;
}
在我HTTPThread;
public void run() {
init(host, port);
downloadData(low, high);
close();
}
注:我們的測試Web服務器是一個修改後的web服務器,它就會範圍:i-j
並在響應中,有i-j
文件的內容。