多线程学习:day1 Thread类实现

本文介绍了使用Java实现多线程的三种方法,重点讲解了通过Thread类和Runnable接口的方式,通过下载图片的示例展示了如何创建和启动子线程。作者强调了线程调度的CPU控制因素。
摘要由CSDN通过智能技术生成

以下是多线程运行的思想

我们有三个实现多线程运行程序的方法,但最后一个很少用到

1、通过Thread类(重点)

2、通过Runnable接口(重点)

3、Callable接口(了解,本文不对这种方法做出详解)

1、通过Thread类实现多线程

案例代码实现:功能为实现多线程同步下载图片

1.1  依赖导入

先导入apache开源的下载依赖

<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
</dependencies>

1.2 创建一个类去继承Thread类

通俗点来说,Thread是一个能让我们开启另外线程的一个类,继承它就可以开启成功,要不我们就只有一个main类主线程

public  class liuhaobin extends Thread{}

通过快捷键alt + enter实现run方法体

@Override
public void run() {}

1.3通过psvm快捷键创建main主类

public static void main(String[] args) {}

1.4创建一个用于下载作用的下载器

class  WebDownloader {
    public void  downloder(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("浩彬哥哥救命,出现异常了");
        }
    }

由于我们在下载器里面定义了一个下载方法,里面有两个参数url和name,所以我们要在“liuhaobin”类里面设置参数名和构造

public class Liuhaobin extends Thread {
    private String url;
    private String name;
//记得写一个构造器
    public Liuhaobin(String url,String name){
        this.url = url;
        this.name = name;
    }

1.5 子线程run方法里面写执行体

首先我们要先把下载器搞出来,然后用上我们在下载器里面设置好的方法,最后打印一下代表完成

//下载图片的执行体
WebDownloader webDownloader =  new WebDownloader();
webDownloader.downloder(url,name);
System.out.println("哥哥,多线程简单应用成功了,下载文件名是" + name);

1.6 主线程里面只需要创建出对象,并在对象里面给参数赋值,再用对象的start()方法就可以开启子线程帮忙工作咯

public static void main(String[] args) {
    Liuhaobin liuhaobin = new Liuhaobin("https://i0.hdslb.com/bfs/article/d8d61ec7a8041b3cb5e9a7a521ea4eba3493138905696744.jpg@1256w_2234h_!web-article-pic.avif","liuhaobin1.jpg");
    Liuhaobin liuhaobin1 = new Liuhaobin("https://i0.hdslb.com/bfs/article/fcd8093a736cec99e7dc28c2bfba302d3493138905696744.jpg@1256w_1884h_!web-article-pic.avif","liuhaobin2.jpg");
    Liuhaobin liuhaobin2 = new Liuhaobin("https://i0.hdslb.com/bfs/article/5a8ae0fe25751228e644f141696b9ed43493138905696744.jpg@1256w_2234h_!web-article-pic.avif","lihaobin3.jpg");

    liuhaobin.start();
    liuhaobin1.start();
    liuhaobin2.start();

}

结果分析

看似是“多线程”,其实是由cpu(调度器)去决定进程里面每个线程的运行,所以每一次运行的结果都有可能不一样的

如此,这篇关于一个简单下载器内容的多线程应用就成功了,大家可以去试试敲敲,稳固基础

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值