下载网图
需要用到commons.io类,这个百度搜索然后下载。
在idea新建一个package叫lib,把下载好的粘贴到lib下,同时要在在lib右键点击add as.library,才可成功导入:
代码:创建线程方式一:继承thread类
package Thread;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
class WebDownloader{
public void downloader(String url,String name){
try{//图片地址转文件
FileUtils.copyURLToFile(new URL(url),new File(name));//import java.net.URL
}catch (IOException e){
e.printStackTrace();
System.out.println("IO异常,downloader方法出现问题");
}
}}
public class TestThread2 extends Thread{
//实现线程类
private String url;
private String name;//保存文件名
public TestThread2(String URL,String name){
//构造方法
this.url=URL;
this.name=name;
}
//(下载图片)线程的执行体
//重写run方法
public void run(){
WebDownloader webDownloader=new WebDownloader();
webDownloader.downloader(url,name);
System.out.println("下载了"+name);
}
public static void main(String[] args) {
TestThread2 t1=new TestThread2("https://i1.hdslb.com/bfs/archive/653b56c7b99e44b28e0f68c805e2d506908be8b3.jpg","1.jpg");
TestThread2 t2=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-10-24/1034079770222137344.jpg","2.jpg");
TestThread2 t3=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-11-04/1038170637430034432.jpg","3.jpg");
//开启多个线程
t1.start();
t2.start();
t3.start();
}
}
运行结果:
代码:创建线程方式一:实现runnable接口
package Thread;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
class WebDownloader{
public void downloader(String url,String name){
try{//图片地址转文件
FileUtils.copyURLToFile(new URL(url),new File(name));//import java.net.URL
}catch (IOException e){
e.printStackTrace();
System.out.println("IO异常,downloader方法出现问题");
}
}}
public class TestThread2 implements Runnable{
//实现线程类
private String url;
private String name;//保存文件名
public TestThread2(String URL,String name){
//构造方法
this.url=URL;
this.name=name;
}
//(下载图片)线程的执行体
//重写run方法
public void run(){
WebDownloader webDownloader=new WebDownloader();
webDownloader.downloader(url,name);
System.out.println("下载了"+name);
}
public static void main(String[] args) {
TestThread2 t1=new TestThread2("https://i1.hdslb.com/bfs/archive/653b56c7b99e44b28e0f68c805e2d506908be8b3.jpg","1.jpg");
TestThread2 t2=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-10-24/1034079770222137344.jpg","2.jpg");
TestThread2 t3=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-11-04/1038170637430034432.jpg","3.jpg");
//开启多个线程
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
}
}
区别:
小结:
>继承thread类
子类继承thread类具有多线程能力
启动线程:子类对象.start()
不建议使用,避免oop单继承局限性
>实现runnable接口
实现接口runnable具有多线程能力
启动线程:传入目标对象+Thread对象.start()
推荐使用,避免了单线程局限性,灵活方便,方便同个线程被多个对象使用