多线程编程入门(持续更新)
进程:资源分配的基本单位
线程:执行的基本单位(主线程与其他子线程)
实现多线程的过程
创建类➡继承Thread类➡重写run()方法→主线程中调用start()方法
public class Thread01 extends Thread{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("子线程"+i);
}
}
public static void main(String[] args) {
//创建一个线程对象
Thread01 thread01 = new Thread01();
//调用start方法开启线程
thread01.start();
//主线程
for (int i = 0; i < 20; i++) {
System.out.println("主线程"+i);
}
}
}
多线程实现同步下载图片
下载commons io 26的jar包,使用下载工具FileUtils进行下载,传入url以及要保存的文件名
public class Thread02 extends Thread{
private String url;//文件所在地址
private String name;//保存的文件名
public Thread02(String url,String name){
this.url=url;
this.name=name;
}
@Override
public void run() {
WebDownloader webDownloader = new WebDownloader();
webDownloader.downloader(url,name);
System.out.println("成功下载文件,并保存名为:"+name);
}
public static void main(String[] args) {
//创建三个线程并启动
Thread02 thread01 = new Thread02("https://dsfs.oppo.com/act/upload/image/20210304/1614824284935215.png","mypicture1.png");
Thread02 thread02 = new Thread02("https://img-blog.csdnimg.cn/20210719165044136.png","mypicture2.png");
Thread02 thread03 = new Thread02("https://img-blog.csdnimg.cn/20210719164938900.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg5MzkwMg==,size_16,color_FFFFFF,t_70","mypicture3.png");
thread01.start();
thread02.start();
thread03.start();
}
//创建下载器
class WebDownloader{
public void downloader(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO出错,download方法出现问题");
}
}
}
}