zoukankan      html  css  js  c++  java
  • 多线程——Runnable接口实现多线程(27)

    视频:https://edu.aliyun.com/course/36/lesson/list?spm=5176.8764728.aliyun-edu-course-tab.2.W6yOMF

    1.Thread类的核心功能是进行线程的启动,但是如果一个类直接继承了Thread类,问题是单继承。Java又提供另一种实现模式:Runnable接口。

    @FunctionalInterface
    public interface Runnable{
        public void run();
    }

    可以发现在接口里面同时存在有一个run()方法,这一点和Thread是相同的,因为只要是接口了子类就必须覆写run()方法。

    范例:利用Runnable定义线程主体类

    class MyThread implements Runnable{
        private String title;
        public MyThread(String title){
            this.title=title;
        }
        @Override
        public void run() {
            for(int i=0;i<10;i++){
                System.out.println(this.title+".x="+i);
            }
        }
    }

    但是新的问题出现了,此时MyThread类继承的不是Thread类,而实现了Runnable接口,虽然解决了单继承,但是没有了start()方法被继承了。那么此时就需要关注Thread类提供的构造方法:

    构造方法:

    public Thread(Runnable target),可以接收Runnable的接口对象,那么通过Thread可以启动。
    范例:启动多线程
    public class ThreadTest {
        public static void main(String[] args) {
            MyThread mt1=new MyThread3("线程1");
            MyThread mt2=new MyThread3("线程2");
            MyThread mt3=new MyThread3("线程3");
            new Thread(mt1).start();
            new Thread(mt2).start();
            new Thread(mt3).start();
        }
    }

    这个时候就启动了多线程,也就是说多线程的启动永远都是Thread类的start()方法。但是要注意的是,对于此时的Runnable接口对象也可以采用匿名内部类或Lambda表达式来时行定义。

    范例:通过匿名内部类定义操作

    public class ThreadTest {
        public static void main(String[] args) {
            new Thread(new Runnable(){
                @Override
                public void run() {
                    System.out.println("Hello World!");
                }
            }).start();
        }
    }

    范例:使用Lambda表达式

    public class ThreadTest3 {
        public static void main(String[] args) {
            new Thread(()->System.out.println("Hello world!")).start();
        }
    }

    在实际开发之中,Runnable接口的子类的定义形式可能很少出现,以上的这种操作是最为常见的做法。

  • 相关阅读:
    双态运维分享之:业务场景驱动的服务型CMDB
    双态运维分享之二: 服务型CMDB的消费场景
    双态运维:如何让CMDB配置维护更贴近人性
    CMDB经验分享之 – 剖析CMDB的设计过程
    APM最佳实践: 诊断平安城市视频网性能问题
    先定一个运维小目标,比方监控它10000台主机
    大规模Docker平台自动化监控之路
    少走冤枉路!带你走过SNMP的那些坑
    完整性约束
    数据类型
  • 原文地址:https://www.cnblogs.com/dengyt/p/6953680.html
Copyright © 2011-2022 走看看