我对多重处理还很陌生,我想知道在多文件下载中使用它们有多方便。 基本上,我有一个应用程序(可以正常工作,可以从URL下载文件(图像,视频...),我想加快此下载速度(现在它们是顺序的),将它们拆分到多个线程上。因此,我创建了一个类“ PrimeThread” ”覆盖了线程类的run方法,并在每次下载时都在主线程中运行了一个Thread实例,但是我没有注意到时间性能有任何提高。 这是我编写的代码(主要):
for(int e = 0;e<videos.size();e++) //for every video i create a new thread
{
PrimeThread thread= new PrimeThread(downloader,path1,path2);
thread.run();
}
这是我在Thread类中编写的代码:
import java.io.IOException;
class PrimeThread extends Thread {
HttpDownloadUtility scaricatore; //instance of the "downloader" class
String path1, path2;
PrimeThread(HttpDownloadUtility scaricatore,String path1,String path2) {
this.scaricatore = scaricatore;
this.path1 = path1;
this.path2 = path2;
}
public void run() {
try {
scaricatore.downloadMedia(path1, path2); //method of the "downloader" class that takes 2 paths in input and downloads from the 1st and put the file downloaded in the 2nd path
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
使用 Thread.start 而不是Thread.run
为了澄清:您执行了PrimeThread.run方法,这只是一个普通方法,它是同步执行的。这意味着,在循环中,下一个“运行”仅在上一个完成后运行。您可以安全地删除“扩展线程”,并且程序可以编译并正常运行。
Thread类的真正“魔术”在方法“ start”中。它由JVM以特殊方式处理。它在OS级别创建一个线程,并开始执行您放入“运行”中的任何代码。
顺便说一句,从Thread类进行扩展并不是一种好习惯。相反,您应该定义要在一个类中运行的代码,该代码实现java.lang.Runnable并使用Thread构造函数new Thread(runnable)。
主循环:
for(int e = 0;e<videos.size();e++) //for every video i create a new thread
{
Thread thread= new Thread(new PrimeRunnable(downloader,path1,path2));
thread.start();
}
可运行:
class PrimeRunnable implements Runnable {
HttpDownloadUtility scaricatore; //instance of the "downloader" class
String path1, path2;
PrimeRunnable(HttpDownloadUtility scaricatore,String path1,String path2) {
this.scaricatore = scaricatore;
this.path1 = path1;
this.path2 = path2;
}
public void run() {
try {
scaricatore.downloadMedia(path1, path2); //method of the "downloader" class that takes 2 paths in input and downloads from the 1st and put the file downloaded in the 2nd path
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}