• 多线程:继承方式和实现方式的联系与区别


     

    继承方式和实现方式的联系与区别
    public class Thread extends Object implements Runnable


    区别
     继承Thread:线程代码存放Thread子类run方法中。
     实现Runnable:线程代码存在接口的子类的run方法。


     实现方式的好处
     避免了单继承的局限性
     多个线程可以共享同一个接口实现类的对象,非常适合多个相同线
    程来处理同一份资源。

    /**
    * 创建多线程的方式二:实现Runnable接口
    * 1. 创建一个实现了Runnable接口的类
    * 2. 实现类去实现Runnable中的抽象方法:run()
    * 3. 创建实现类的对象
    * 4. 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
    * 5. 通过Thread类的对象调用start()
    *
    *
    * 比较创建线程的两种方式。
    * 开发中:优先选择:实现Runnable接口的方式
    * 原因:1. 实现的方式没有类的单继承性的局限性
    * 2. 实现的方式更适合来处理多个线程有共享数据的情况。
    *
    * 联系:public class Thread implements Runnable
    * 相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
    *
    * @author ch
    * @create 2019-02-13 下午 4:34
    */

     

    Runnable源码展示:
    /*
     * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
     * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */
    
    package java.lang;
    
    /**
     * The <code>Runnable</code> interface should be implemented by any
     * class whose instances are intended to be executed by a thread. The
     * class must define a method of no arguments called <code>run</code>.
     * <p>
     * This interface is designed to provide a common protocol for objects that
     * wish to execute code while they are active. For example,
     * <code>Runnable</code> is implemented by class <code>Thread</code>.
     * Being active simply means that a thread has been started and has not
     * yet been stopped.
     * <p>
     * In addition, <code>Runnable</code> provides the means for a class to be
     * active while not subclassing <code>Thread</code>. A class that implements
     * <code>Runnable</code> can run without subclassing <code>Thread</code>
     * by instantiating a <code>Thread</code> instance and passing itself in
     * as the target.  In most cases, the <code>Runnable</code> interface should
     * be used if you are only planning to override the <code>run()</code>
     * method and no other <code>Thread</code> methods.
     * This is important because classes should not be subclassed
     * unless the programmer intends on modifying or enhancing the fundamental
     * behavior of the class.
     *
     * @author  Arthur van Hoff
     * @see     java.lang.Thread
     * @see     java.util.concurrent.Callable
     * @since   JDK1.0
     */
    @FunctionalInterface
    public interface Runnable {
        /**
         * When an object implementing interface <code>Runnable</code> is used
         * to create a thread, starting the thread causes the object's
         * <code>run</code> method to be called in that separately executing
         * thread.
         * <p>
         * The general contract of the method <code>run</code> is that it may
         * take any action whatsoever.
         *
         * @see     java.lang.Thread#run()
         */
        public abstract void run();
    }
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    前端工程师如何打发闲余时光?(转)
    比较好的前端开发工具
    蓝桥历年套题 约数倍数选卡片 博弈
    单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
    5-15
    2018CCPC桂林站G Greatest Common Divisor
    STL中的BITSET运用
    2018CCPC桂林站JStone Game
    牛客2019湘潭大学程序竞赛
    Combine String HDU
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14642906.html
Copyright © 2020-2023  润新知