【多线程学习01】继承Thread类和实现Runnable接口

本文介绍了如何使用Java实现多线程,包括继承Thread类的方式实例下载网络图片,以及通过Runnable接口创建线程。展示了两种启动线程的方法和一个实际应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单概念:编好的程序运行时是一个进程,一个进程运行时可有包含多个线程(单核CPU宏观上并行,微观上串行)。

        调用start()方法实现多线程(继承Thread类)

package thread;

//创建线程方式一:继承Thread类,重写run()方法,调用start()开启线程。
//线程开启后不一定立即执行,由CPU调度执行

public class TestThread01 extends Thread {
    @Override
    public void run() {  //run方法线程体
        for (int i = 0; i < 10; i++) {
            System.out.println("run进程" + i);
        }
    }

    public static void main(String[] args) { //main线程,主线程
        TestThread01 testThread01 = new TestThread01();
        testThread01.start();  //子线程执行run()
        //testThread01.run();  普通方法调用,主线程执行run()

        for (int i = 0; i < 1000; i++) {
            System.out.println("main进程" + i);
        }
    }
}

        下载commons.io jar包实现多线程下载网络图片。(继承Thread类)

package thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class TestThread02 extends Thread {

    private String url;
    private String name;

    //有参构造
    public TestThread02(String url, String name){
        this.url = url;
        this.name = name;
    }

    @Override
    public void run() {
        Download d = new Download();
        d.download(url, name);
        System.out.println("下载图片名为:" + name);
    }

    public static void main(String[] args) {
        TestThread02 t1 = new TestThread02("https://i0.hdslb.com/bfs/album/af3d104fec1dbbd0d827b9303b7fa43a57a96269.jpg@518w.webp", "Yoimiya01.jpg");
        TestThread02 t2 = new TestThread02("https://i0.hdslb.com/bfs/album/8b8784a26770bee9d3db0a05dba39eb628f5c253.jpg@518w.webp", "Yoimiya02.jpg");
        TestThread02 t3 = new TestThread02("https://i0.hdslb.com/bfs/album/b361130f2e9e22c70de450295dadaf25654cf012.jpg@518w.webp", "yunjin.jpg");

        t1.start();
        t2.start();
        t3.start();
    }
}

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

        使用多线程下载网络图片。(使用Runnable接口)

package thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;


//创建线程方式二:实现Runnable接口,重写run()方法,执行线程需丢入Runnable接口实现类,调用start()方法。
public class TestThread03 implements Runnable {

    private String url;
    private String name;

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

    @Override
    public void run() {
        Download01 d = new Download01();
        d.download(url, name);
        System.out.println("下载图片名为:" + name);
    }

    public static void main(String[] args) {
        //创建Runnable接口类实现对象
        TestThread03 tt1 = new TestThread03("https://i0.hdslb.com/bfs/album/701b99929ee3c4dec758b7191d3894b257238190.jpg@518w.webp", "Yoimiya03.jpg");
        TestThread03 tt2 = new TestThread03("https://i0.hdslb.com/bfs/article/311a9d65f3f58baac2706ce5edc839127b089f2e.jpg@942w_1290h_progressive.webp", "Yoimiya04.jpg");
        TestThread03 tt3 = new TestThread03("https://i0.hdslb.com/bfs/album/bfa49f3297f6dbff8b9038d72baf78421d44c90c.jpg@518w.webp", "Yoimiya05.jpg");

        //创建线程对象,通过线程对象来开启线程
        new Thread(tt1).start();
        new Thread(tt2).start();
        new Thread(tt3).start();
    }
}

class Download01 {
    public void download(String url, String name){
        try {
            FileUtils.copyURLToFile(new URL(url), new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常,download方法出现问题");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值