Java多线程03-法2实现Runnable接口
03、实现Runnable接口
- 定义TestThread3实现Runnable接口
- 实现run方法,编写方法体
- 创建线程对象,调用start()方法启动线程
代码演示
//创建线程的方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
//如果选择继承Thread来启用多线程则只能继承一个类,若使用Runnable则可以实现多个接口,继承其他类
//接口当然不能被实例化,但可以实例化实现接口的对象,该对象也可以说是接口对象
public class TestThread3 implements Runnable{
private String url;
private String name;
public TestThread3(String url, String name) {
this.url = url;
this.name = name;
}
@Override
public void run() {
MyDownloader myDownloader=new MyDownloader();
myDownloader.WebDownder(url,name);
System.out.println("文件下载成功:"+name);
}
public static void main(String[] args) {
TestThread3 testThread301=new TestThread3("http://8.136.39.89:9090/asserts/img/portfolio-1.jpg","portfolio-1.jpg");
TestThread3 testThread302=new TestThread3("http://8.136.39.89:9090/asserts/img/portfolio-2.jpg","portfolio-2.jpg");
TestThread3 testThread303=new TestThread3("http://8.136.39.89:9090/asserts/img/portfolio-3.jpg","portfolio-3.jpg");
new Thread(testThread301).start();//查看Thread方法中可知构造方法中有Runnable参数构造发法 避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
new Thread(testThread302).start();//public Thread(Runnable target){init(null, target, "Thread-" + nextThreadNum(), 0);}
new Thread(testThread303).start();//任何实现了Runnable接口的对象都可以当参数丢进构造器中,其实Thread本身也实现了Runnable
}
}
class MyDownloader{
public void WebDownder(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
}
}
}
小结
- 继承Thread
- 子类继承Thread类具备多线程能力
- 启动线程:子类对象.start()
- 不建议使用:避免OOP单继承局限性
- 实现Runnable接口
- 实现接口Runnable具有多线程能力
- 启动线程:传入目标对象+Thread对象.start()
- 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
本文来自博客园,作者:Cn_FallTime,转载请注明原文链接:https://www.cnblogs.com/CnFallTime/p/15887925.html