• 实现Runnable和继承Thread的区别


    啥都先不说,运行两段程序看看结果再分析

    实现Runnable接口的程序代码

    public class ThreadTest1 implements Runnable {
    
        private int num = 10;
    
        @Override
        public void run() {
            for (int i = 0; i <= 100; i++) {
                if (num > 0) {
                    System.out.println(Thread.currentThread().getName()+"执行结果:" + (num--));
                }
            }
    
        }
    
        public static void main(String[] args) {
            ThreadTest1 t1 = new ThreadTest1();
    
            Thread t01 = new Thread(t1, "线程1");
            Thread t02 = new Thread(t1, "线程2");
            Thread t03 = new Thread(t1, "线程3");
    
            t01.start();
            t02.start();
            t03.start();
        }
    }

    运行结果:

    线程2执行结果:9
    线程3执行结果:8
    线程3执行结果:6
    线程1执行结果:10
    线程3执行结果:5
    线程2执行结果:7
    线程3执行结果:3
    线程3执行结果:1
    线程1执行结果:4
    线程2执行结果:2

    继承Thread类的实现代码

    public class ThreadTest2 extends Thread{
        
        private int num = 10;
    
        @Override
        public void run() {
            
            for(int i =0; i <=100; i++) {
                if(num >0) {
                    System.out.println(Thread.currentThread().getName()+"执行结果:"+(num--));
                }
            }        
        }
        
        public static void main(String[] args) {
            ThreadTest2 t01 = new ThreadTest2();
            ThreadTest2 t02 = new ThreadTest2();
            ThreadTest2 t03 = new ThreadTest2();
            t01.start();
            t02.start();
            t03.start(); 
        }
    }

    运行结果:

    Thread-0执行结果:10
    Thread-0执行结果:9
    Thread-0执行结果:8
    Thread-0执行结果:7
    Thread-0执行结果:6
    Thread-0执行结果:5
    Thread-0执行结果:4
    Thread-0执行结果:3
    Thread-0执行结果:2
    Thread-0执行结果:1
    Thread-1执行结果:10
    Thread-1执行结果:9
    Thread-1执行结果:8
    Thread-1执行结果:7
    Thread-1执行结果:6
    Thread-1执行结果:5
    Thread-1执行结果:4
    Thread-1执行结果:3
    Thread-2执行结果:10
    Thread-2执行结果:9
    Thread-2执行结果:8
    Thread-1执行结果:2
    Thread-2执行结果:7
    Thread-1执行结果:1
    Thread-2执行结果:6
    Thread-2执行结果:5
    Thread-2执行结果:4
    Thread-2执行结果:3
    Thread-2执行结果:2
    Thread-2执行结果:1

    从上面的运行结果可以看出,两者的区别。

    实现Runnable接口的,对于三个线程来说共享的是ThreadTest1对象的资源。

    继承Thread类,三个线程都是独立的运行,线程间不共享资源。

    所以可以总结出以下区别:

    1.Runnable接口的话,可以避免单继承的局限性,具有较强的健壮性。

    2.Runnable可以实现资源的共享,同时处理同一资源。

    3.Thread类的线程间都是独立运行的,资源不共享。

    4.继承Thread类不再被其他类继承(java不存在多继承)

  • 相关阅读:
    1.Python基础语法
    Python学习4:商城购物
    Python学习3:猜年龄游戏进阶版
    Python学习2:猜年龄游戏
    python学习1:判断学生成绩等级
    K8S集群平滑回退或升级
    Xtrabackup工作原理
    Android App 侧边栏菜单的简单实现
    NoActionBar主题下如何添加OptionsMenu
    TabLayout+ViewPager制作简单导航栏
  • 原文地址:https://www.cnblogs.com/fxust/p/8998696.html
Copyright © 2020-2023  润新知