前言:我相信创建线程的方式对于所有的java开发程序员来说都不陌生,在面试过程中这个问题也是高频考点。鉴于此,小编用本篇博文来整理几种线程的创建方式,希望对同学们有所帮助~

文章目录

  • 一、什么是进程?线程和进程有什么关系?
  • 二、线程如何创建?有几种方式?
    • 1.继承Thread类
    • 2.实现Runable接口
    • 3.实现Callable接口结合FutureTask
    • 4.使用lambda表达式
    • 5.使用线程池创建

一、什么是进程?线程和进程有什么关系?

进程是程序的一次执行过程,是资源分配的最小单位
线程是CPU调度的最小单位
线程是进程的一部分
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

二、线程如何创建?有几种方式?

线程的创建有很多种方式,总结下来分为以下几种

1.继承Thread类

/*** 创建线程的第一种方式:继承Thread类*/
public class MyThread01 extends Thread{@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "正在运行");}public static void main(String[] args) {MyThread01 myThread01 = new MyThread01();myThread01.start();System.out.println(Thread.currentThread().getName() + "正在运行");}
}

2.实现Runable接口

需要注意的是,当使用实现Runnable接口的方式创建的线程在线程启动的时候不能直接用实现Runnable接口的实现类调start()方法,而是要当做参数传入Thread类实例,然后调用start()方法进行线程启动,原因就是下面这个Runnable接口的实现类MyThread02 不是线程类。

/*** 创建线程的第二种方式:实现Runnable接口*/
public class MyThread02 implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "正在运行");}public static void main(String[] args) {MyThread02 myThread02 = new MyThread02();Thread thread = new Thread(myThread02);thread.start();System.out.println(Thread.currentThread().getName() + "正在运行");}
}

小知识:其实我们的第一种方式中继承的Thread类在源码中也是实现了Runnable接口哟~

3.实现Callable接口结合FutureTask

这种创建线程的方式在实际工作中不用常用,所以在面试过程中也很少有遇到,但是了解一些也是加分项哟。 FutureTask是一个实现Runnable接口的类,FutureTask内部有一个成员变量将callable接口的返回值保存起来,并通过提供get方法获取。

/*** 创建线程的第三种方式:实现Callable接口,结合FutureTask*/
public class MyThread03 implements Callable<String> {@Overridepublic String call() throws Exception {System.out.println(Thread.currentThread().getName() + "正在运行");return "call() 执行完毕";}public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> futureTask = new FutureTask<>(new MyThread03());Thread thread3 = new Thread(futureTask);thread3.start();System.out.println(Thread.currentThread().getName() + futureTask.get());}
}

4.使用lambda表达式

/*** 创建线程的第四种方式:使用Lambda表达式*/
public class MyThread04 {public static void main(String[] args) {Thread thread = new Thread(() ->{System.out.println(Thread.currentThread().getName() + "正在运行");});thread.start();}
}

当然也可以简写为这样:

/*** 创建线程的第四种方式:使用Lambda表达式*/
public class MyThread04 {public static void main(String[] args) {new Thread(() ->{System.out.println(Thread.currentThread().getName() + "正在运行");}).start();}
}

5.使用线程池创建

这种方式其实是实际工作中使用的最多的一种方式,但同时也是大家在面试回答过程中很容易遗漏的。由于这块东西比较多,小编决定后续单独出一篇文章就行补充总结,敬请期待~

创建线程的几种方式---最全面的创建线程方式总结---线程创建方式面试看这篇就够了相关推荐

  1. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  2. 创建线程的三种方法_Netty源码分析系列之NioEventLoop的创建与启动

    前言 前三篇文章分别分析了 Netty 服务端 channel 的初始化.注册以及绑定过程的源码,理论上这篇文章应该开始分析新连接接入过程的源码了,但是在看源码的过程中,发现有一个非常重要的组件:Ni ...

  3. Java虚拟线程:一种低成本、轻量级、用户态的Java线程

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 OpenJDK在 ...

  4. (原创)23种设计模式一网打尽,看这篇就够了!

    设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.建造者模式.单例模式.原型模式. 结构型模式,共七种:适配器模式.代理模式.装饰器模式.桥接模式.组合模式 ...

  5. goland创建一个不限长度的字节切片_关于Go切片,看这篇就够了

    01.切片的内部实现和基础功能 切片是围绕着动态数组的概念来构建的,它跟数组类似,是用于管理数据集合的一种数据结构. 数组一旦创建就不能更改其长度和类型,而切片就不同,切片可以按需自动增长和缩小,增长 ...

  6. 线程的几种状态_拜托:不要再问我线程有多少种状态了

    废话不多说,有六种状态 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中, 有几种状态呢?在Thread类中包含了个State枚举类,State枚举类 ...

  7. angularjs1访问子组件_vue 组件通信看这篇就够了(12种通信方式)

    vue 组件间的通信是 vue 开发中很基础也十分重要的部分,作为使用 vue 的开发者每天都在使用.同时,vue 通信也是面试中非常高频的问题,有很多面试题,都是围绕通信展开. 本文会介绍常见的通信 ...

  8. com组件的ref有时需要有时不需要?_vue 组件通信看这篇就够了(12种通信方式)

    点击上方"前端小苑",选择"置顶公众号" 精品技术文章,热门资讯第一时间送达 vue 组件间的通信是 vue 开发中很基础也十分重要的部分,作为使用 vue 的 ...

  9. java和python可以在一个项目中同时使用么-java调用python的几种用法(看这篇就够了)...

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

最新文章

  1. 线上性能问题初步排查方法
  2. 创智播客 大数据_中国电信启动嘉创智谷——新仓远景产业园5G部署
  3. js笔记(8)之数组篇
  4. 实验9:Problem D: 从点到面
  5. c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)
  6. 计算机知识竞赛策划案,计算机基础知识竞赛策划书.doc
  7. 【总结】学了不少自然语言处理的理论知识,如何通过实战进一步提高能力?...
  8. 全志F1C100s使用记录:资料索引与基础说明
  9. 麒麟服务器操作系统V10虚拟机安装
  10. HTML与CSS回顾
  11. 苹果上传闪退 php,怎样解决iPhone程序闪退问题
  12. BDP数据可视化分析工具,TAGUL数据可视化分析工具
  13. 使用 Linux 文件恢复工具
  14. python爬取网易云音乐 专辑图片+歌词
  15. 宏基因组单个样本数据处理流程笔记
  16. 2018年12月8日国际项目经理PMP培训考试报名中
  17. 网络营销推广效果在于流量精准度!你做到了吗?
  18. 天美服务器未响应,王者荣耀服务器上热搜,无数玩家遭遇掉线烦恼,天美该怎么办?...
  19. (1)-Halcon入门学习路线
  20. Python time time()方法-菜鸟教程

热门文章

  1. 设计一个表示学生的类:Student,该类的属性包括name、age、scores(包含语文、数学和英语三科成绩,每科成绩的类型为整数),此外该类还有3个方法。
  2. 为什么资本不爱IT教育
  3. mantis 修改语言为繁体
  4. [Android][adsp]QXDM 抓取adsp初始化log
  5. android启动播放器,android – 使用Intent启动Media Player
  6. 线性规划求解器 matlab,混合整数线性规划基础:基于求解器
  7. cnn模型训练——从环境搭建到模型部署
  8. SZTUOJ 1019.总之就是不太可爱
  9. 有哪些title标题优化的好方法?
  10. Android横竖屏切换重载问题与小结