2016/11/07 线程的创建和启动
- 继承Thread类创建线程类
步骤:
- 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。
- 创建Thread子类的实例,即创建了线程对象。
- 调用线程对象的start()方法来启动该线程。
进行多线程编程时不要忘了Java程序运行时默认的主线程,main()方法的方法体就是主线程的线程执行体。
i变量是FirstThread的实例属性,而不是局部变量,但因为程序每次创建线程对象时都需要创建一个FirstThread对象,所有Thread-0和Thread-1不能共享该实例属性。
使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。
- 实现Runnable接口创建线程类
步骤:
- 定义Runnable接口的实现类,并重写该接口的run()方法,该run()的方法体同样是该线程的线程执行体。
- 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。代码如下所示:
也可以在创建Thread对象时为该Thread对象指定一个名字,代码如下所示:
上面程序中的代码创建了两个Thread对象,并调用start()方法来启动这两个线程。在FirstThread和SecondThread中创建线程对象的方式有所区别:前者直接创建的Thread子类即可代表线程对象;后者创建的Runnable对象只能作为线程对象的target。
两个子线程的i变量是连续的,也就是采用Runnable接口的方式创建的多个线程可以共享线程类的实例属性。这是因为在这种方式下,程序所创建的Runnable对象只是线程的target,而多个线程可以共享一个target,所以多个线程可以共享一个线程类(实际上应该是线程的target类)的实例属性。
- 使用Callable和Future创建线程
从Java 5 开始,Java提供了Callable接口,该接口怎么看都像是Runnable接口的增强版,Callable接口提供了一个call()方法。问题是:Callable接口是Java 5新增的接口,而且它不是Runnable接口的子接口,所以Callable对象不能直接作为Thread的target。而且call()方法还有一个返回值——
call()方法并不是直接调用,它是作为线程执行体被调用的。
步骤:
- 创建Callable接口实现类,并实现call()方法,该call(0方法有返回值。
- 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
- 使用FutureTask对象作为Thread对象的target创建并启动新线程。
- 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。
上面程序中创建Callable()实现类与创建Runable实现类并没有太大的差别,只是Callable的call()方法允许声明抛出异常,而且允许带返回值。
程序先创建一个Callable实现类的实例,然后将该实例包装成一个FutureTask对象。
转载于:https://www.cnblogs.com/zcr3108346262/p/6039393.html
2016/11/07 线程的创建和启动相关推荐
- python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式
threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口 以后我们就用 threading 模块来管理线程就可以了. Tread 类:控制线程创建.启动及运行方式 一.线 ...
- java线程的创建和启动深度解析
线程的创建和启动 java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例. java创建线程有三种方法: 一:继承Thread类创建线程类 通过Thread类来创建并 ...
- 线程的创建与启动——Thread 类有两个常用的构造方法:Thread()与 Thread(Runnable)||多线程运行结果是随机的
线程的创建与启动 在 Java 中,创建一个线程就是创建一个 Thread 类(子类)的对象(实例). Thread 类有两个常用的构造方法:Thread()与 Thread(Runnable).对应 ...
- Java的知识点25——程序、进程与线程 || 线程的创建和启动
程序.进程与线程 进程的特点:动态性.并发性.独立性 并发和并行的区别 并发:多个CPU同时执行多个任务 并行:一个CPU(采用时间片)同时执行多个任务 注:很多多线程是模拟出来的,真正的多线程是指有 ...
- Java线程:创建与启动
Java线程:创建与启动 一.定义线程 1.扩展java.lang.Thread类. 此类中有个run()方法,应该注意其用法: public void run() 如果该线程是使用独立的 Runna ...
- java线程 创建与启动_浅析Java中线程的创建和启动
前言 线程是一个程序内部的顺序控制流.cpu实际上在一个时间点上,只执行一个.只不过我们把cup分成了多个时间片,由于速度很快,我们看起来像是多个线程.就像你的时间分成几片,这样整体看来做事情有规律, ...
- 多线程编程(2): 线程的创建、启动、挂起和退出
python多线程编程(2): 线程的创建.启动.挂起和退出 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法.而创建 ...
- java runnable 启动_Java多线程:线程的创建与启动
# 面试题: Java中创建线程有几种方式. 不同的创建方式有什么区别. 如何启动一个线程. # Java中创建线程的方式 JDK源码中的描述:两种 image.png 第一种是继承Thread类,重 ...
- python多线程编程(2): 线程的创建、启动、挂起和退出
From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节,python的threading.Thread类有 ...
最新文章
- 如何用TF Object Detection API训练交通信号灯检测神经网络?
- MFC 重设对话框的尺寸
- 润乾设计器连接数据源,ie预览问题
- 马云:新型企业想要保持创新力 规模要在60人以内
- 【项目实战课】NLP入门第1课,人人免费可学,基于TextCNN的新闻文本分类实战...
- java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...
- 洛谷 P1469 找筷子
- 一名IT经理是如何把项目带崩的。。。
- 计算机等级考试二级Python讲座(三)
- python 提取网页正文_一篇文章教会你用Python爬取淘宝海量信息,把淘宝商品整理成一个表格...
- 【PowerShell】PS中 the fuck 插件(PoShFuck)将 wtf 搜索引擎从 Google 改为 Baidu 或者 Bing
- VMware之以太网链接
- QT软件开发: 获取CPU序列号、硬盘序列号、主板序列号 (采用wmic命令)
- c语言 愚人节题目,愚人节整人题目大全
- LaTeX:大于等于号,小于等于号,大于号,小于号
- SX1278、SX1276、SX1262的简单详解
- 西门子数控机床如何用FTP进行程序传输
- 今天我们来聊聊,如何做好第三方系统对接
- docker安装nginx镜像
- .NET WebApi实现RSA加密与解密,签名与验签