实现多线程的3种方式

1、继承Thread类

看jdk源码可以发现,Thread类其实是实现了Runnable接口的一个实例,继承Thread类后需要重写run方法并通过start方法启动线程。

继承Thread类耦合性太强了,因为java只能单继承,所以不利于扩展。

2、实现Runnable接口

通过实现Runnable接口并重写run方法,并把Runnable实例传给Thread对象,Thread的start方法调用run方法再通过调用Runnable实例的run方法启动线程。

所以如果一个类继承了另外一个父类,此时要实现多线程就不能通过继承Thread的类实现。

3、实现Callable接口

通过实现Callable接口并重写call方法,并把Callable实例传给FutureTask对象,再把FutureTask对象传给Thread对象。它与Thread、Runnable最大的不同是Callable能返回一个异步处理的结果Future对象并能抛出异常,而其他两种不能。

示例代码

结果输出:

Thread1 running...

Thread2 running...

Thread3 running...

name:java,age:22

推荐去我的博客:

觉得不错,别忘了点赞+转发哦!

3种java实现多线程_实现java多线程的3种方式,99%人没用过第3种相关推荐

  1. 实现java多线程的3种方式,99%人没用过第3种

    实现多线程的3种方式 1.继承Thread类 看jdk源码可以发现,Thread类其实是实现了Runnable接口的一个实例,继承Thread类后需要重写run方法并通过start方法启动线程. 继承 ...

  2. java foreach多线程_详解多线程入门案例与java8的并行流

    进程与线程 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 多线程的创建方式,继承Thread实现Runable /*** 第一种创建线程的方式,继承Thread*/ public clas ...

  3. java1.5多线程_【Java多线程】JDK1.5并发包API杂谈

    并发与并行 并发 一个或多个处理器执行更多的任务(通过划分时间片来执行更多的任务),从逻辑上实现同时运行: 如,N个并发请求在一个两核CPU上: 并行 N个处理器分别同时执行N个任务,从物理上实现同时 ...

  4. java对象模型 指令_深入理解多线程(二)—— Java的对象模型

    上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令实现,同步方法使用ACC_SYNCHRONIZED标记符实现.后 ...

  5. java 调用关系_【Java基础】几种简单的调用关系与方法

    直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...

  6. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  7. java初始化数据报_初始化java原因

    虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类 即虚拟机的类加载机制. 在Java中,类型的加载.链接 ...

  8. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

  9. java中同步_在Java中的方法同步和语句同步(块同步) - Break易站

    Java 多线程 线程主要通过共享对字段的访问和参考字段引用的对象进行通信.这种通信形式非常有效,但可能出现两种错误:线程干扰和内存一致性错误.需要一些同步构造来防止这些错误.以下示例显示了我们需要同 ...

最新文章

  1. java 并发_Java并发原理无废话指南
  2. TLS 1.3 Handshake Protocol (下)
  3. B-Tree和B+tree
  4. mybatis源码学习(三):MappedStatement的解析过程
  5. 微信开发者工具:Failed to load font ************** net::ERR_CONNECTION_RESET问题解决办法
  6. kotlin 查找id_Kotlin程序查找等边三角形的区域
  7. 在优图网,临摹借鉴设计大咖作品|品图标设计:主要趋势
  8. linux下DNS配置详解
  9. movelast对数据记录数有要求吗_客户验厂,电脑坏了,考勤记录数据可以自动生成找回来吗?...
  10. 用C语言读把SGY地震数据读成txt
  11. 阿里的世界版图——“风清扬”的全球梦
  12. 3.2 发送请求参数
  13. win10系统怎么qq远程连接到服务器,QQ远程控制功能在Win10系统上无法使用怎么解决...
  14. 联想笔记本打字不显示选字框
  15. P1053 [NOIP2005 提高组] 篝火晚会
  16. 啊哈C——学习4.4一起来找茬
  17. IT风云15年的那些人、那些事(一)
  18. 软件工程毕业设计项目分享【含源码+论文】
  19. Android 专栏
  20. 测绘眼镜蛇-DINI转手簿数据(1.0.0)软件说明(免费)

热门文章

  1. python怎么背景实现循环_在Python的一段程序中如何使用多次事件循环详解
  2. OpenShift 4 - 安装部署 Ansible Automation Platform 4.x 控制台
  3. Windows Terminal Preview 1.3 发布
  4. TensorFlow简介:向量对象
  5. 互联网协会点名QQ音乐等14款 App 过度收集用户信息
  6. ubuntu无法登陆mysql_ubuntu11.04mysql报错、无法正常工作、无法登陆mysql
  7. linux 查看磁盘空间_【linux磁盘划分】3分钟看懂!
  8. c++ 打印条码_条码标签打印软件快捷键指南
  9. php7链接数据库报错The server requested authentication method unknown to the client
  10. linux 系统忘记数据库root密码