Java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析。
通过三种方法可以创建java线程:
1、继承Thread类。
2、实现Runnable接口。
3、实现Callable接口,并通过FutureTask的实例注入到Thread的target中。
创建java线程首要的目的是通过新创建的线程执行自己的代码逻辑,就是实现重载run方法。
所以我们无论是继承Thread类还是实现Runnable接口,要做的就是重载run方法,实现自己的代码逻辑。
接下来是运行:无论使用哪种方法实现自定义线程,我们都要创建线程实例(继承Thread类的方式是通过派生类对象的创建,从而创建父类对象)。然后通过执行Thread实例的Start方法,将该实例加入到ThreadGroup中,然后通过native方法start0运行该Thread实例。
经过一系列运行状态的检测(具体干了啥,都在native方法中),最终调用Thread实例的run方法(实现Runnable接口)或者调用Thread派生类实例的run方法(继承Thread类)。
实现Runnable和继承Thread的区别在于继承Thread类的线程类不能再继承其他父类(Java单继承决定)。当然有的博文表示实现Runnable接口的方式可以使Runnable实现类的代码被多个Thread共享,其实只是将Runnale的实现类的实例注入到了多个Thread的target字段中,这些Thread实例操作的是同一个Runnable接口的实现类实例。这当然可以实现共享,但Runnable的子类如Thread都可以被注入到Thread类的target中。
使用Runnable实现run方法在设计模式上更加符合面向对象组合的要求。
还有一种方式是使用Callable<T>接口,这种方式实质上和Runnable是一致的。使用Callable<T>能够使线程返回类型为T的值。
主要方法是:
FutureTask<Integer> futureTask = new FutureTask<Integer>((Callable<Integer>)()->{ System.out.println("callable create thread"); return 5; } )
new Thread().start();
然后通过使用FutureTask类的get方法获取返回值,该方法会阻塞直到线程退出。FutureTask继承了Future<T>和Runnable接口,所以能够被注入到target中。
线程执行后,调用FutureTask实例的run方法,该方法中调用callable的call方法,因此,Callable中的call方法可以存放自定义线程代码逻辑的实现。
call方法的返回值被存放在outcome属性中。然后通过FutureTask的get方法获取。
转载于:https://www.cnblogs.com/xiangleili/p/8834802.html
Java创建线程的三种方法相关推荐
- Java 创建线程的三种方法比较
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...
- java 创建线程的三种方法_java 创建线程的几种方式
说道线程,肯定会想到使用 java.lang.Thread.java这个类 那么创建线程也主要有2种方式 第一种方式: public class MyThread extends Thread { p ...
- Java 创建线程的三种方式
一.继承Thread类创建 1.定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体: 2.创建该类的实例对 ...
- java 创建线程_【80期】说出Java创建线程的三种方式及对比
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...
- Java创建线程的三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- java创建线程的两种方法区别
在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口. 下面通过两个例子来分析两者的区别: 1)继承Thread类 public class TestThread exte ...
- java创建线程的四种方法
第一种: 通过继承Thread类创建线程 第二种: 通过实现Runnable接口创建线程 这两种早已烂记于心,这里就不作过多的介绍, 主要介绍其源码 Thread类 implements Runna ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 目录 一.继承Thread类来创建线程 二.实现Runnable接口来创建线程 三.通过Callable和Future来创建线程 四.三种方式创 ...
- java线程三种方法,Java基础_线程的使用及创建线程的三种方法
线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进 ...
最新文章
- python下使用epoll
- Python 进度条 tqdm
- python线程检测网段脚本!
- CASE_04 基于FPGA的电梯控制器
- java assembly 打包_maven 使用assembly 进行打包的方法
- 匈牙利算法——最大匹配问题详解
- 社区论坛小程序带订阅功能
- 特殊字符的html编码转化
- html5 web报表工具,Web报表工具的填报功能
- 微弱信号检测_移动电话/手机信号增强器/扩大器
- cad计算机快捷键命令大全,2016cad快捷键命令大全,AutoCAD快捷键命令大全
- 移动端1px边框实现
- 地铁WIFI值28亿?运营商终于不用背锅了
- 人类一败涂地做图教程_人类一败涂地皮肤怎么弄 人类一败涂地皮肤制作教程...
- Another app is currently holding the yum lock解决方法
- ssm+Vue计算机毕业设计在线答题系统(程序+LW文档)
- 查看CUDA,GPU对应计算能力
- 81章 老子1章到_老子1章2章80章81章
- 前世今生的痴,问谁可以洞悉
- 对标 Amazon Go,这家初创企业盯上了国内无人商店市场
热门文章
- java方法不写访问权限_【JAVA小白】 问关于访问权限的问题,写接口遇到错误
- oracle修改seq为order,Oracle 创建和修改sequence
- android webdav 播放器,Android WebDAV
- scalar2color
- MATLAB中三维曲面命令
- TensorFlow 2.0深度学习案例实战
- 最新发布!《统计学习方法》第二版无监督学习视频课上线了!
- 10代i5主频为什么这么低_i5-10210U 笔记本推荐
- android 自定义 黑点,Android自定义密码样式 黑点转换成特殊字符
- 无线网卡没有linux驱动,ubuntu18.04没有无线网卡驱动怎么办?