并发编程基础一(线程创建方式)

142 阅读2分钟

稍微有一点编程基础的朋友,你一定了解并发的概念,并且写过多线程的代码。我们知道并发是提升应用处理能力的手段之一,比如java编程语言的多线程,比如go语言的协程。这个系列,代码层面我们以java为主体,但是思想都相同,思想上适用于编程语言,所谓万变不离其宗! 在开始之前,请你先思考一个问题:

你知道在java编程语言中,有几种创建线程的方式吗?如果是在面试场景下,面对面试官,你该如何回答?

答案:

在java编程语言中,创建线程的方式,我们以官方文档为准,只有两种。
关于说线程池、Callable与Future是项目开发中常用的方式,它们的底层其实还是Runnable

方式一:继承Thread

package com.anan.thread.createthread;

public class ThreadDemo {

    public static void main(String[] args) {
        // 创建线程对象,并启动
        Thread t1 = new MyThread();
        t1.start();
    }
}

/**
 * 继承Thread方式,创建线程
 */
class MyThread extends Thread{

    @Override
    public void run() {
        System.out.println("继承Thread方式,创建线程");
    }
}

image.png

方式二:实现Runnable

package com.anan.thread.createthread;

public class RunnableDemo {

    public static void main(String[] args) {
        // 创建线程对象,并启动
        Runnable r1 = new MyRunnable();
        Thread t1 = new Thread(r1);
        
        t1.start();

    }
}

/**
 * 实现Runnable接口,创建线程
 */
class MyRunnable implements Runnable{

    public void run() {
        System.out.println("实现Runnable接口,创建线程");
    }
}

image.png

讨论分享

#实际开发中,哪一种创建线程的方式更好?
	1.虽然在java编程语言中,有两种创建线程的方式:继承Thread、实现Runnable
	2.在实际开发中,推荐使用实现Runnable接口方式,原因有:
		2.1.实现Runnable接口方式,可以将线程处理业务,与创建线程分离,从而解耦
		2.2.实现Runnable接口方式,扩展性更好,因为在java编程语言中,只能继承一个父类,而可以实现多个接口
		2.3.实现Runnable接口方式,配合线程池使用,有更好的资源利用率和性能