• 多线程——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接口的子类的定义形式可能很少出现,以上的这种操作是最为常见的做法。

  • 相关阅读:
    大型网站技术架构读书笔记目录
    读书笔记1: 大型网站架构演化
    关于HTML5中的canvas标签的个个人理解
    javascript的部分功能实现
    简易计算机的做法
    关于C语言的学习和理解
    体验LESS CSS 框架
    在学习ps中的问题和理解。
    关于做登录页面
    css实现动画功能
  • 原文地址:https://www.cnblogs.com/dengyt/p/6953680.html
Copyright © 2020-2023  润新知