用Java多线程,如何停止?

Mus*_*afa 4 java multithreading http

我正在为我的作业编写代码,我对编写多线程应用程序并不熟悉.我学会了如何打开一个线程并启动它.我最好显示代码.

 for (int i = 0; i < a.length; i++) {
     download(host, port, a[i]);
     scan.next();                        
 }
Run Code Online (Sandbox Code Playgroud)

我上面的代码连接到服务器打开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;
}
Run Code Online (Sandbox Code Playgroud)

在我的HTTPThread中;

 public void run() {
     init(host, port);
     downloadData(low, high);
     close();
 }
Run Code Online (Sandbox Code Playgroud)

注意:我们的测试Web服务器是一个经过修改的Web服务器,它获取Range:i-j并且在响应中,有i-j文件的内容.

Mar*_*ope 5

您将需要调用join()正在进行下载的线程的方法.这将导致当前线程等待下载线程完成.是关于如何使用join的好帖子.

如果您想发布下载方法,您可能会获得更完整的解决方案

编辑:

好的,所以在你开始你的线程之后,你需要像这样加入它们:

for (HTTPThread t : list) {
    t.start();
}
for (HTTPThread t : list) {
    t.join();
}
Run Code Online (Sandbox Code Playgroud)

这将停止方法返回,直到所有HTTPThreads都已完成