多线程
参考视频:多线程02:线程、进程、多线程哔哩哔哩bilibili
1.概念
2.线程创建
创建线程方式一:继承Thread类,重写run()方法,调用start开启线程
package com.mokuiran.thread;
public class Demo extends Thread {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在玩游戏!!!"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象
Demo demo = new Demo();
//调用start()方法开启线程
demo.start();
for (int i = 0; i < 200; i++) {
System.out.println("我在学习!!!"+i);
}
}
}
//注意:线程的开启不一定立即执行,由CPU调度执行
创建线程方式一:实现Runnable接口
package com.mokuiran.thread;
public class RunnableDemo implements Runnable {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在玩游戏!!!"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建runnable接口的实现类对象
RunnableDemo runnableDemo = new RunnableDemo();
//创建线程对象,通过线程对象来开启我们的线程,代理
Thread thread = new Thread();
thread.start();
for (int i = 0; i < 200; i++) {
System.out.println("我在学习!!!"+i);
}
}
}
总结
继承Thread类
-
子类继承Thread类具备多线程能力
-
启动线程:子类对象.start()
-
不建立使用:避免OOP单继承局限性
实现Runnable接口
-
实现接口Runnable具有多线程能力
-
启动线程:传入目标点对象+Thread对象.start()
-
推荐使用:避免单继承的局限性,灵活方便,方便同一个对象被多个线程使用
注意:两个方法的输出结果都是交替输出,线程之间并无先后顺序。
案例一:
实现多线程同步下载图片:
package com.mokuiran.thread;标签:Runnable,String,Thread,---,线程,多线程,public,name From: https://www.cnblogs.com/mokuiran/p/16656273.html
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//实现多线程同步下载图片
public class Demo2 extends Thread{
private String url;//网络图片的地址
private String name;//保存的文件名
public Demo2(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) {
Demo2 demo2 = new Demo2("/i/l/?n=22&i=blog/2941481/202207/2941481-20220730105748137-1136505936.png","代码.png");
demo2.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("异常,downloader()方法出现问题");
}
}
}