稍微有一点编程基础的朋友,你一定了解并发的概念,并且写过多线程的代码。我们知道并发是提升应用处理能力的手段之一,比如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方式,创建线程");
}
}
方式二:实现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接口,创建线程");
}
}
讨论分享
#实际开发中,哪一种创建线程的方式更好?
1.虽然在java编程语言中,有两种创建线程的方式:继承Thread、实现Runnable
2.在实际开发中,推荐使用实现Runnable接口方式,原因有:
2.1.实现Runnable接口方式,可以将线程处理业务,与创建线程分离,从而解耦
2.2.实现Runnable接口方式,扩展性更好,因为在java编程语言中,只能继承一个父类,而可以实现多个接口
2.3.实现Runnable接口方式,配合线程池使用,有更好的资源利用率和性能