A. 某公司面试题java11使用并发多线程加速下载文件,如何写
先建一个用于下载文件的多线程类,通常要指明下载文件的位置(URL)和文件名以及保存到本地的路径
public class FileDownloader implements Runnable
{
private static File file;//要下载的文件
private static String url;//文件所在URL
private static File storagePath;//保存路径
public static void initialize(File file, String url, File storagePath)//初始化静态字段,初始化的代码不用我写吧
}
然后,指明同步块,目的是让各个线程共享一个文件资源,那样它们可以知道同一个文件的下载状况(即获取其他线程下载文件到哪个位置,以防重复下载)
public synchronized void fileDownload()//此方法用于下载文件,一般的Java程序员都会写,实在不会我可以帮你补上
或者
public void fileDownload(){
synchronized(file){
synchronized(url){
synchronized(storagePath){
}}}}//给每个字段加上同步块
run()方法的实现就以自己的喜好去写吧,只要里面调用了fileDownload()方法就行。
public void run(){
…
fileDownload();//下载文件
…
}
然后,在主类的main方法中创建一个多线程数组:
Runnable[] fds=new FileDownloader[线程数量];//fds为file_downloaders缩写
Thread[] threads=new Thread[线程数量];
最后使用循环把所有的线程逐一启动。
for(int i=0;i<线程数量;i++){
threads[i]=new Thread(fds[i]);
threads[i].start();
}
B. JAVA多线程下载东西为什么要先创建一个大小相同的空文件呢
读懂题目,再回答!
多线程下载,就是说:有多个人同时把A车上货物搬到B车上去。每个人就像一个线程。
如果不给每个人弄个与B车相同结构的车,那每个人搬的东西搬放方式或位置将不同,到时候,合起来的时候就会放上整齐,或放不满,放不下的问题。
试想,每个人都以B车的结构搬来货物,又以相同的方式摆放,只不过,各摆各的部分,合起来不就是完整的一车货物了吗?
说白了,还是数据结构的问题。优秀和合理的数据结构,使程序开发起来事半功倍。
C. Java语言多线程下载不同文件
这个其实很简单,重要的就是要建立 线程类,包含下载文件地址参数,以及具体下载配置,如果是ftp的话;
在一个就是构建线程池对下载的数量分配。具体的可以自己尝试开发下,别人咀嚼过的永远没有味道 ,即便给你标注好注释,过一阵子你也会忘记。
D. 请问你的java在线程里下载文件是怎么实现的线程这方面我不大懂
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
OutputStream o = response.getOutputStream();
byte b[] = new byte[1024];
// the file to download.
String directory = request.getParameter("csvLogDir");
String fileName = request.getParameter("csvLogName");
File fileLoad = new File(directory, fileName);
// the dialogbox of download file.
response.setHeader("Content-disposition", "attachment;filename="
+ fileName);
// set the MIME type.
response.setContentType("application/x-tar");
// get the file length.
long fileLength = fileLoad.length();
String length = String.valueOf(fileLength);
response.setHeader("Content_Length", length);
// download the file.
FileInputStream in = new FileInputStream(fileLoad);
int n = 0;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
}
最简单的就是直接把a标签写成文件URL,哈哈哈,这个方法很淫荡的
E. java实现在线程里下载文件时,如何中断线程停止下载
线程设置一个变量,公开SET方法。当你想让它停下来。就能过这个方法传一个值。线程中判断是停止,那就停下来。
如果是timer,有停止方法。
F. 用java实现文件的下载,如何提高下载速度(非web开发)
下面贴出的代码是一个简单的读取远程文件保存到本地的实现,至于提高下载速度你可以利用多线程,具体可参考最下面的那个网址——
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class DownloadTester {
public static void main(String[] args) throws IOException {
String urlStr = "http://img..com/img/logo-.gif";
String path = "D:/";
String name = urlStr.substring(urlStr.trim().lastIndexOf("/"));
URL url = new URL(urlStr);
InputStream in = url.openConnection().getInputStream();
File file = new File(path + name);
FileOutputStream out = new FileOutputStream(file, true);
int counter = 0;
int ch;
byte[] buffer = new byte[1024];
while ((ch = in.read(buffer)) != -1) {
out.write(buffer, 0, ch);
counter += ch;
System.out.println(counter + ":byte");
}
out.flush();
in.close();
out.close();
}
}
G. JAVA多线程下载问题
一般来讲。我会使用
synchronized(this){
this.wait();
}
synchronized(this){
this.notify();
}
H. java多线程下载比单线程慢!!
哥子
多线程不是说一定比单线程快,要看网络的稳定情况,还有多线程的运行过程其实也就是不同的时间段内使用CPU权限的分配,对于多线程是一般用于开起多个同时要使用的东西我感觉才有用,如果你只是用于一个程序的开起
你用多线程干什么呢?
I. java多线程下载的问题请教。
你书上的code和http://www.cnblogs.com/wanghui390/p/4046575.html 这个网址上的一样么?
如果一样的话,那么我觉得这么做的目的应该是:
fileSize/threadNum 的结果是四舍五入之后的结果,如果是舍去了一部分,那么按照这个网址上的code到最后就会有一点没有下载。所以它另每个filtePart的大小都增大1,并且在DownThread里面加入了另外一个条件:
length < currentPartSize && (hasRead = inStream.read(buffer)) > 0
就可以保证在文件的末尾,停止读操作。
J. 如何使用java做一个简单的窗体多线程下载器
用java swing做界面
java net来下载呗。。。
多线程的话 你可以先获取那个文件,然后就能得到 文件大小 字节数组,然后按照设定的线程数,线程1负责数组0---数组1000的字节下载,线程2负责数组1001到2000 以此类推
那么这里1000就是缓冲大小拉!