继承Thread类实现多线程
- Thread类所属的包和实现的接口
-
继承Thread类实现多线程的具体步骤:先继承Thread类,然后再重写Thread类的run()方法。
-
以下是一个从网上下载图片的例子:
- 先创建一个下载器Picdownloader
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; public class Picdowmloader { public void dowmLoad(String url,String name){ try { FileUtils.copyURLToFile(new URL(url),new File("name")); } catch (IOException e) { e.printStackTrace(); } } }
-
在创建一个线程测试类TestThread
package threadByThread; public class TestThread extends Thread { private String url; private String name; public TestThread(String url, String name) { this.name = name; this.url = url; } @Override public void run() { new Picdowmloader().dowmLoad(url, name); } public static void main(String[] args) { TestThread testThread1 = new TestThread("https://images.cnblogs.com/cnblogs_com/blogs/800940/galleries/2338925/t_230825084221_OIP-C.jpg", "1.jpg"); TestThread testThread2 = new TestThread("https://images.cnblogs.com/cnblogs_com/blogs/800940/galleries/2338925/t_230825084222_1a8d06d86cdd4e7eb5e4548c457e5371.jpeg", "2.jpg"); TestThread testThread3 = new TestThread("https://images.cnblogs.com/cnblogs_com/blogs/800940/galleries/2338925/t_230825084222_OIP-C%20(1).jpg", "3.jpg"); testThread1.start(); testThread2.start(); testThread3.start(); } }
-
运行结果
-
可以看到图片并不是按照顺序下载的,说明我们的进程创建成功。
-
犯下的错误
- 刚开始写测试类时,写成了下面的代码,导致了只是实现了下载图片的功能,并没有体现到多线程,说明对多线程还是不是很熟悉。
public class TestThread extends Thread { @Override public void run() { new Picdowmloader().dowmLoad("https://images.cnblogs.com/cnblogs_com/blogs/800940/galleries/2338925/t_230825084221_OIP-C.jpg","1.jpg"); new Picdowmloader().dowmLoad("https://images.cnblogs.com/cnblogs_com/blogs/800940/galleries/2338925/t_230825084222_1a8d06d86cdd4e7eb5e4548c457e5371.jpeg","2.jpg"); new Picdowmloader().dowmLoad("https://images.cnblogs.com/cnblogs_com/blogs/800940/galleries/2338925/t_230825084222_OIP-C%20(1).jpg","3.jpg"); } public static void main(String[] args) { TestThread testThread = new TestThread(); testThread.start(); } }
- 在使用org.apache.commons.io.FileUtils中的FileUtils.copyURLToFile方法时,把url当成是String类型的了,要把String类型的地址转化成URL,需要new URL(String)。
-