美文网首页java多线程编程
2018-04-18 Java 多线程编程实战-线程创建的两种方

2018-04-18 Java 多线程编程实战-线程创建的两种方

作者: 李2牛 | 来源:发表于2018-04-18 20:06 被阅读0次

    多线程的创建方式

    1. 定义 Thread 类的子类创建
    /**
     * @author: kent
     * @date: 2018/4/18 09:40
     */
    public class WelcomeApp {
        public static void main(String[] args) {
            //create new thread
    
            Thread welcomeThread = new WelcomeThread();
            welcomeThread.start();
    
            System.out.printf("1. Welcome ! I'm %s.%n",Thread.currentThread().getName());
    
        }
    }
    class WelcomeThread extends Thread{
        @Override
        public void run(){
            System.out.printf("2. Welcome ! I'm %s.%n",Thread.currentThread().getName());
        }
    }
    
    image.png

    多次执行程序得到的结果可能不同

    1. 创建 Runnable 接口实例
    
    /**
     * @author: kent
     * @date: 2018/4/18 09:48
     */
    public class WelcomeApp1 {
        public static void main(String[] args) {
    //创建线程
            Thread welcomeThread =  new Thread(new WelcomeTask());
    
            welcomeThread.start();
    
            System.out.printf("1. welcome ! I'm %s.%n",Thread.currentThread().getName());
        }
    }
    
    class WelcomeTask implements Runnable{
        @Override
        public void run(){
            System.out.printf("2. Welcome ! I'm %s.%n",Thread.currentThread().getName());
        }
    }
    
    image.png

    多次执行程序得到的结果可能不同

    避免应用代码直接调用线程的 run 方法

    
    /**
     * @author: kent
     * @date: 2018/4/18 10:32
     */
    public class WelcomeApp2 {
        public static void main(String[] args) {
    
            Thread welcomeThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.printf("2. welcome ! I'm %s.%n",Thread.currentThread().getName());
                }
            });
    
            welcomeThread.start();//启动线程
            welcomeThread.run();//直接调用,其实运行在main线程里面
            System.out.printf("1. welcome ! I'm %s.%n",Thread.currentThread().getName());
        }
    }
    
    
    image.png

    多次执行程序得到的结果可能不同

    比较两种创建方式

    从面向对象的角度来说:第一种创建方式(创建Thread的子类)是一种基于继承(Inheritance)的技术,第二种创建方式(以Runnable接口实例为构造器参数直接通过 new 创建 Thread 实例)是一种基于组合的(Composition)技术,由于组合相对于继承来说耦合性(Coupling)更低,因此更加灵活。组合是优先选用的技术

    相关文章

      网友评论

        本文标题:2018-04-18 Java 多线程编程实战-线程创建的两种方

        本文链接:https://www.haomeiwen.com/subject/rafvkftx.html