java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码)。java使用线程执行体来代表这段程序流。

 

继承Thread类创建线程类

通过继承Thread类来创建并启动多线程的步骤如下:

1:定义Thread类的子类,并重写该类的run()方法,该方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。

2:创建Thread子类的实例。即创建了线程的对象。

3:调用线程对象的start()方法来启动线程。

 

实现Runnable接口创建线程类

实现Runnable接口来创建并启动多线程的步骤如下。

1:定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

2:创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象

3:调用线程对象的start()方法来启动该线程

 

java5提供了Callable接口,该接口则呢呣看都像是Runable接口的增强版,Callable接口提供了一个call()方法可以作为线程执行体,但call()方法比run()方法功能更加强大。

1:call()方法可以有返回值

2:call()方法可以声明抛出异常

因此完全可以提供一个Callable对象作为Thread的target,而该线程的线程执行体就是该Callable对象的call()方法。问题是,Callable接口是java5新增的接口,而且它不是Runnable接口的子接口。所以Collable对象不能直接作为Thread的target.而且call()方法还有一个返回值,call方法并不是直接调用,他是作为线程执行体被调用的那么如何获取call()的返回值呢?

jiava5提供了Future接口来代表Callable接口里call()方法的返回值,并为Future接口提供了一个实现类FutureTask。该实现类实现了Future接口,并实现了Runnable接口。可以作为Thread类的target.

Callable接口有泛型的限制,Callable接口里的泛型形参类型与call()方法的返回值类型相同。而且Callable接口是函数式接口,因此可使用Lanbda表达式创建Callable对象。

创建并启动有返回值的线程步骤如下:

1:创建Callable接口的实现类,并实现call()方法,该方法将作为线程执行体,且该方法有返回值,再创建Callable实现类的实例。

2:使用FutureTask类包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值

3:使用FutureTask对象作为Thread对象的target创建并启动新线程

4:调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

 

1:多线程
(1)多线程:一个应用程序有多条执行路径
进程:正在执行的应用程序
线程:进程的执行单元,执行路径
单线程:一个应用程序只有一条执行路径
多线程:一个应用程序有多条执行路径

多进程的意义?
提高CPU的使用率
多线程的意义?
提高应用程序的使用率
(2)Java程序的运行原理及JVM的启动是多线程的吗?
A:Java命令去启动JVM,JVM会启动一个进程,该进程会启动一个主线程。
B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
(3)多线程的实现方案(自己补齐步骤及代码 掌握)
A:继承Thread类
B:实现Runnable接口
(4)线程的调度和优先级问题
A:线程的调度
a:分时调度
b:抢占式调度 (Java采用的是该调度方式)
B:获取和设置线程优先级
a:默认是5
b:范围是1-10
(5)线程的控制(常见方法)
A:休眠线程
B:加入线程
C:礼让线程
D:后台线程
E:终止线程
(6)线程的生命周期
A:新建
B:就绪
C:运行
D:阻塞
E:死亡

多线程安全问题的原因(也是我们以后判断一个程序是否有线程安全问题的依据)
A:是否有多线程环境
B:是否有共享数据
C:是否有多条语句操作共享数据

同步解决线程安全问题
A:同步代码块
synchronized(对象) {
需要被同步的代码;
}

这里的锁对象可以是任意对象。

B:同步方法
把同步加在方法上。

这里的锁对象是this

C:静态同步方法
把同步加在方法上。

转载于:https://www.cnblogs.com/-9527/p/5230699.html

黑马程序员—————— 多线程相关推荐

  1. [置顶] 黑马程序员 -- 多线程

    黑马程序员 -- 多线程 polk601001 星期五, 15/06/2012 - 17:14 发布 什么是多线程? 多线程就是使程序并发(同时)执行几个操作. .NET 框架类库在System.Th ...

  2. 黑马程序员—多线程,单线程

    ------- Windows Phone 7手机开发..Net培训.期待与您交流! ------- 单线程与多线程比较: 单线程只能做一件事情,多线程可以做多种事情.多线程的应用,可以让一个程序同时 ...

  3. 黑马程序员——多线程

    ------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  4. 黑马程序员 多线程

    进程:是一个正在执行中的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元. 线程在控制着进程的执行. 一个进程中至少有一个线程. ...

  5. 黑马程序员——多线程的实现(2+1)详解

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 方法1:继承Thread类 继承Thread类,重写run方法,把需要被线程执行的代码写到run ...

  6. 黑马程序员——总集篇

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 本人编写技术博客的时候只是针对章节的一些比较重要的知识点来编写的: 个人感觉质量 ...

  7. 黑马程序员,黑马论坛-----多线程知识点总结

    来源:黑马程序员,黑马论坛 创建: 方式一:继承Thread类 步骤: 继承Thread覆写run( )方法 通过Thread子类创建线程对象 调用start( );方法开启线程执行run( ) 方式 ...

  8. 【C++学习汇总】【黑马程序员】

    [C++学习汇总] 1 黑马程序员 2 深蓝学院 3 自发式收集学习 1 黑马程序员 [C++][第一篇][黑马 p84 - p105 ][引用][重载][类和对象-struct.class] [C+ ...

  9. 黑马程序员入学Java知识——精华总结

    黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...

最新文章

  1. Java swing是什么?有什么作用?
  2. python pip 换源
  3. CCNP-1 EIGRP基本配置(BSCI)
  4. 埃氏筛秒素数题(洛谷P5723题题解,Java语言描述)
  5. 麒麟Linux关闭telnet,银河麒麟系统管理员使用手册(30页)-原创力文档
  6. CSS3属性选择器总结
  7. 【操作系统】为什么需要内核
  8. 【珍藏级】商业杂志图表的经典用色
  9. linux最好的mp4软件,【良心推荐】5款好用的MP4视频编辑器
  10. Office 针式打印机如何插入色带
  11. C语言自定义函数使用
  12. es7 如何从项目resource读取index的mapping、setting.json文件
  13. linux安装docker容器(copy就完了)
  14. 漫威联手六位中国运动员致敬漫威电影宇宙十年
  15. 超星学习通小助手多线程工具Python
  16. prefetch()
  17. ffmpeg 的下载与使用
  18. 北海450值得入手吗?附带(越野萝莉)照片
  19. 地理位置查询附近商家
  20. php备份王,帝国备份王常见问题及解决方法

热门文章

  1. [pytorch、学习] - 9.1 图像增广
  2. 统计信息自动收集任务失效原因排查
  3. 车智汇模式系统技术开发数据
  4. 从C语言到C++成长经历所得的一些技巧和感悟
  5. Android环境搭建遭遇Unsupported major.minor version 52.0
  6. 企业使用RTX腾讯通2013
  7. Windows on Device 项目实践 4 - 智能风扇制作
  8. Venkat 演讲翻译:你要清除代码中的异味
  9. 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
  10. python opencv立体测距 立体匹配BM算法