多线程的创建

创建多线程

利用继承Thread类创建线程的步骤:

  • 自定义类要继承Thread类。
  • 重写run()方法,并编写执行体
  • 创建线程对象,调用start()方法启动程序

如图所示,多线程是各个线程并发执行,在主线程这里是main()执行时,系统并发执行子线程中的run()方法

在这里插入图片描述

这里新建了一个ThreadTest类继承Thread类,并在类中重写run()方法,而后在main()方法中start()运行该线程。这里不能直接在main()中调用run()方法,如果不用start(),直接调用run()方法就是普通的调用类中的方法,不是多线程。

	public class ThreadTest  extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("看kankan书"+i);
        }

    }

    public static void main(String[] args) {
        ThreadTest threadTest = new ThreadTest();
        threadTest.start();

        for (int i = 0; i < 1000; i++) {
            System.out.println("玩耍"+i);
        }
    }


}

在这里插入图片描述

这里子线程因为不一定立即执行,当主线程循环较少,执行事件短暂的话,结果可能就会显示成主线程执行结果加上子线程的结果,此时线程的并发执行就会不明显。就如同不用start()方法调用,而直接使用run()方法。

创建线程的另一种方法

利用实现runnable接口完成线程的创建

用类实现Runnable接口,并重写run()方法,在创建线程时实例化类并用Thread中的start()方法执行线程

public class ThreadTest3 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("看kankan书"+i);
        }
    }

    public static void main(String[] args) {
        ThreadTest3 threadTest3 = new ThreadTest3();
        new Thread(threadTest3).start();
        for (int i = 0; i < 1000; i++) {
            System.out.println("玩耍"+i);
        }
    }
}

在这里插入图片描述

结果显示也得出了线程的并发

多线程的案例

我么可以利用多线程的特点去同时下载3个图片,首先我们需要一个jar包去调用下载图片的方法,下载地址:https://mvnrepository.com/artifact/commons-io/commons-io/2.4

这里我们建立三个子线程,三个子线程同时都做下载图片的事

public class ThreaTest1 extends Thread{
    private String url;//下载的网址
    private String name;//下载完成之后给他的一个名字

    public ThreaTest1(String url,String name){
        this.url=url;
        this.name=name;

    }
    @Override//重写run函数
    public void run() {
        Downloader downloader = new Downloader();
        downloader.downloader(url,name);
        System.out.println("下载"+name);

    }

    public static void main(String[] args) {
        
        //新建三个子线程
        ThreaTest1 t1 = new ThreaTest1("https://img-blog.csdnimg.cn/2021031618561839.png#pic_center","1.jpg");
        ThreaTest1 t2 = new ThreaTest1("https://img-blog.csdnimg.cn/20210317190752665.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NjE4MDE1Mw==,size_16,color_FFFFFF,t_70#pic_center","2.jpg");
        ThreaTest1 t3 = new ThreaTest1("https://img-blog.csdnimg.cn/20210317185937859.png#pic_center","3.jpg");
        //三个子线程执行
        t1.start();
        t2.start();
        t3.start();
    }
}
//下载器,用来下载图片的地址
class  Downloader{

    public void downloader(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("方法出现异常");
        }

    }
}

在这里插入图片描述
在这里插入图片描述

从结果可以看出三张图片同时下载了下来,也可以使用第二种方法去下载,推荐用第二种。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值