Java基础学习:多线程05

Java基础学习:多线程05

  • 实现Runnable接口:(创建线程的第二种方式)

    • 定义MyRunnable类实现Runnable接口;

    • 重写run()方法,编写线程体;

    • 创建线程对象,调用start()方法;

    ( 推荐使用Runnable接口,因为Java是单继承的局限性 )

     

  • 总结:

    • 继承Thread类:

      • 子类继承Thread类具备多线程能力;

      • 启动线程:子类对象.start()

      • 不建议使用:避免OOP单继承局限性;

    • 实现Runnable接口:

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

      • 启动线程:new Thread( 接口对象 ).start();

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

 

  • 代码案例:实现Runnable类

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

       //重写run()方法
       @Override
       public void run() {
           //线程体
           for (int i = 0; i <200 ; i++) {
               System.out.println("我在学习多线程"+i);
          }
      }

       public static void main(String[] args) {

           //创建Runable接口的实现类对象:这只是个接口对象,该对象中没有start()方法
           TestThread03 testThread03=new TestThread03();
           //创建线程对象,通过线程对象来开启我们的线程,代理
          /* Thread t3=new Thread(testThread03);//实现类放在构造器里面,因为thread的构造方法支持
          t3.start();*/
           //简写
           new Thread(testThread03).start();

           for (int i = 0; i <2000 ; i++) {
               System.out.println("我是主线程"+i);

          }
      }

    }


  • 代码案例2:下载图片


    /**
    * 用Runnable方式实现:多线程下载图片
    */
    public class TestThread04 implements Runnable{

       private String url;
       private String name;

       //构造方法,用于创建对象
       public TestThread04(String url,String name){
           this.name=name;
           this.url=url;
      }

       @Override
       public void run() {
           //线程体
           webDownLoader1 webDownLoader1=new webDownLoader1();
           webDownLoader1.downLoad(url,name);
           System.out.println("下载完毕"+name);
      }

       //主线程
       public static void main(String[] args) {
           TestThread04 t1=new TestThread04("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "1.png");
           TestThread04 t2=new TestThread04("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "2.png");
           TestThread04 t3=new TestThread04("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "3.png");

           new Thread(t1).start();
           new Thread(t2).start();
           new Thread(t3).start();

      }
    }

    //下载图片
    class webDownLoader1{
       public void downLoad(String url,String name){
           try {
               FileUtils.copyURLToFile(new URL(url),new File(name));
          } catch (IOException e) {
               e.printStackTrace();
               System.out.println("----");
          }
      }

    }

posted @   gzs1024  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示