首页 > 编程语言 >java创建线程的方式有几种?

java创建线程的方式有几种?

时间:2023-02-08 00:13:50浏览次数:59  
标签:Runnable java Thread 继承 几种 线程 run

java中创建线程的方式有多少种,这个问题也是众多纷纭,这个时候更应该参考官方文档(https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html)了,文档很明确地指出两种创建线程的方法.
第一种就是继承Thread类,第二种就是实现Runnable接口,而其他的方法比如Callable也是包装Runnable,本质上还是Runnbale

OK,现在问题来了,继承Thread类好还是继承Runnable接口好,答案很明显,还是继承Runnbale接口更好一些,首先因为语言设计的问题,java只能单继承,如果你继承了Thread类了,就不能继承其他类了,很麻烦,第二点就是Runnable的设计概念更符合计算机科学中“分解”的思维,把任务和线程概念分离出来,减少了创建/销毁线程的开销。

其实,本质上都是Thread的,只不过执行单元有两种实现,可以看run方法的源码

可以看出调用run方法的时候会先判断有没有target,而这个target是Runnbable类型的!所以我们在继承Runnable接口的时候要重写run方法,如果是直接继承Thread类就不会进入if里面,或者干脆继承Thread类后也重写个run方法,都不会走这三行代码了

标签:Runnable,java,Thread,继承,几种,线程,run
From: https://www.cnblogs.com/spark-cc/p/17100220.html

相关文章

  • python 的多线程
    创建一个多线程fromthreadingimportThread,ThreadErrorimporttimedeftask_01():print("开始发送邮件")time.sleep(1)print("邮件发送成功")i......
  • JavaScript五花八门的跳转方式
    我们最常见的跳转方式是location.href="http://www.baidu.com",这种是最常见的,但是常常使用location.replace,location.assign,,window.open,history.replaceState,location.......
  • Java07
    一、面向过程&面向对象1.面向过程:线性思维,处理简单问题2.面向对象:分类,复杂问题 二、面向对象(OOP)1.本质:以类的方式组织代码,以对象的组织(封装)数据。......
  • Spring框架中的单例Bean是线程安全的么?
    Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装。所以单例bean是线程不安全的。如果Bean是有状态的(有状态即有数据存储功能),则需要我们自己来保证线程安......
  • java面试题(四)
    1.java面试题(四)1.1cap理论,base理论1.Consistency(一致性):即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致。对于客户端来说,一致性指的是并发访问......
  • java——spring boot集成redis——首先进行复习——本机环境安装(windows环境下)
    鉴于之前学习的时候已经安装完成,此处不重复安装,有需要的可以参考网上各种教程。 本章节以黑马教程为准开始进行复习和学习,进一步提高后端能力 黑马教程:redis——B站......
  • zzul1058_Java
    importjava.util.Scanner;publicclasszzul1058{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=inpu......
  • zzul1073_Java
    importjava.util.Scanner;/***限制解是正数,且脚数为偶数即可*/publicclasszzul1073{publicstaticvoidmain(String[]args){Scannersc=newScann......
  • zzul1074_Java
    packagecom.ittrash;importjava.util.Scanner;publicclasszzul1074{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);......
  • 【JavaScript】5_常见的运算符(三种逻辑运算符+关系运算符)
    5、逻辑运算符1!逻辑非!可以用来对一个值进行非运算它可以对一个布尔值进行取反操作true-->falsefalse-->true如果对一个非布尔值进行取反,它会先将其转换为布尔值......