使用Runnable接口创建线程,很简单

大家好,今天分享.使用Runnable接口创建线程

首先Java创建线程可以通过三种方法:
即:

1.继承Thread类创建线程类(重点)

2.通过Runnable接口创建线程类(重点)

3.通过Callable接口(了解即可)

今天,使用Runnable接口创建线程。

步骤:

1.定义MyRunnable类实现.Runnable接口
2.创建run()方法,编写线程执行体
3.创建线程对象,调用start()方法启动线程

package Demo01;

public class Thread03  implements Runnable{
//    创建线程的第二种方式:
//
//    1.实现Runnable接口
    //2.重写run()方法,编写线程执行体
     //3.创建线程对象,调用start()方法启动线程
     public void run()  {
         //run方法线程体
         for (int i = 0; i < 400; i++) {
             System.out.println("我在吃饭"+i);     //输出的信息


         }
     }

    public static void main(String[] args) {     //这里是主线程
         
         


        Thread03 thread03 =new Thread03();    //创建Runnable接口的实现类对象
        


        Thread thread =new Thread(thread03);      //创建线程对象,通过线程对象来启动线程
        
        
        thread.start();     //开启线程


        for (int i = 0; i < 300; i++) {
            System.out.println("多线程"+i);
        }

    }
}

它的执行结果:

在这里插入图片描述
解释:
1.它的执行结果和 Thread继承的效果是一样的

2.调用start()方法启动线程: 结果就是线程以交替同时启动

这里还有注意点:

这两行代码(注意)

  //    Thread thread =new Thread(thread03);      //创建线程对象,通过线程对象来启动线程


      //  thread.start();     //开启线程

它等效于下面这一行代码:

   new Thread(thread03).start();

整体代码在下面:

package Demo01;

public class Thread03  implements Runnable{
//    创建线程的第二种方式:
//
//    1.实现Runnable接口
    //2.重写run()方法,编写线程执行体
     //创建线程对象,调用start()方法启动线程
     public void run()  {
         //run方法线程体
         for (int i = 0; i < 400; i++) {
             System.out.println("我在吃饭"+i);     //输出的信息


         }
     }

    public static void main(String[] args) {     //这里是主线程




        Thread03 thread03 =new Thread03();    //创建Runnable接口的实现类对象



    //    Thread thread =new Thread(thread03);      //创建线程对象,通过线程对象来启动线程


      //  thread.start();     //开启线程
         new Thread(thread03).start();     //它等效上面两行被注释掉的代码
         

        for (int i = 0; i < 300; i++) {
            System.out.println("多线程"+i);
        }

    }
}

这是它的执行结果:(它是一样的效果)

在这里插入图片描述
它是一样的效果

下面我们使用Runnable接口的方式来实现之前的Thread实现下载图片:

看源码:

package Demo02;

import org.apache.commons.io.FileUtils;

import javax.imageio.IIOException;
import java.io.File;
import java.io.IOException;
import java.net.URL;

public class ThreadTest  implements Runnable {     //这一行要注意
    private String url;
    private String name;

    public ThreadTest(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) {
        ThreadTest k1 = new ThreadTest("https://img-home.csdnimg.cn/images/20220218094038.jpg ", "1.jpg");
        ThreadTest k2 = new ThreadTest("https://img-home.csdnimg.cn/images/20220218094038.jpg ", "2.jpg");
        ThreadTest k3 = new ThreadTest("https://img-home.csdnimg.cn/images/20220218094038.jpg ", "3.jpg");

      new Thread(k1).start();     //这是我们改动的地方
      new Thread(k2).start();
      new Thread(k3).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("io异常,downloader方法异常");
        }
    }
}

看结果:

在这里插入图片描述

就是这样的

总结:

继承Thread 类
子类继承Thread类具有多线程能力
启动线程: 子类对象.start()
不建议使用:
OOP单继承有局限性

实现接口Runnable具有多线程能力

启动线程:传入目标对象+Thread对象.start ()

推荐使用:避免单继承局限性,灵活方便,方便同一对象被多个线程使用

好了,有关于使用Runnable接口创建线程就到这里了,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思诚代码块

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值