首页 > 编程语言 > 详细

多线程01

时间:2021-04-06 21:13:50      阅读:34      评论:0      收藏:0      [点我收藏+]

1.多线程的概念

1.1初步了解多线程

1.什么是多线程

线程=生产线

多线程=多条生产线

2.为什么要学习多线程?

提高程序的执行效率(例如一次上传多张图片、例如迅雷同时下载多个文件)

1.2并发和并行

并行:在同一时刻,多条指令在多个cpu核心上同时执行。

并发:在一段时间内,多条指令在一个cpu核心上交替执行。

1.3进程和线程

1.什么是进程?

进程:os资源分配的最小单位,就是程序的执行过程,可以理解为正在执行的程序。

2.进程有什么特点?

独立性:进程是一个能独立运行的基本单位,同时也是os调度,分配资源的的独立单位

动态性:进程的实质是程序的一次执行过程,是动态产生,也是动态消亡的

并发性:任何进程都可以和其他进程一起并发执行

3.什么是线程?

线程是cpu调度的最小单位,它是进程的一部分,是进程中的单个控制流,是一条执行路径。

一个进程中有多条线程就称之为多线程

2.多线程的实现方式

2.1实现多线程的方式有哪些?
  • 继承Thread类的方式进行实现

  • 实现Runnable接口的方式进行实现

  • 利用Callable和Future接口方式实现

2.方法介绍

方法名说明
void run() 在线程开启后,此方法将被调用执行
void start() 使此线程开始执行,Java虚拟机会调用run方法()

1.为什么要重写run()方法?

因为run()是用来封装被线程执行的代码

2.run()方法和start()方法的区别?

run():封装线程执行的代码,直接调用,相当于普通方法的调用

start():启动线程;然后由JVM调用此线程的run()方法

2.2三种实现方式的对比

1.实现Runnable、Callable接口

  • 好处: 扩展性强,实现该接口的同时还可以继承其他的类

  • 缺点: 编程相对复杂,不能直接使用Thread类中的方法

2.继承Thread类

  • 好处: 编程比较简单,可以直接使用Thread类中的方法

  • 缺点: 可以扩展性较差,不能再继承其他的类

3.三种实现方式的应用场景

如果不需要线程的返回值就使用Runnable,需要返回值就使用Callable

3.线程类中的常见方法

3.1设置和获取线程名称

方法介绍

方法名说明
void setName(String name) 将此线程的名称更改为等于参数name
String getName() 返回此线程的名称
3.2 Tread方法-获得当前线程对象
方法名说明
Thread currentThread() 返回对当前正在执行的线程对象的引用
3.3 线程休眠

1.相关方法

方法名说明
static void sleep(long millis) 使当前正在执行的线程停留(暂停执行)指定的毫秒数
3.4 线程优先级

1.线程调度有哪两种调度方式

  • 分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片

  • 抢占式调度模型:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些

2.Java使用什么调度模型?

抢占式调度模型

3.多线程执行有什么特点?

随机性

4.优先级相关方法

方法名说明
final int getPriority() 返回此线程的优先级
final void setPriority(int newPriority) 更改此线程的优先级线程默认优先级是5;线程优先级的范围是:1-10

5.如何正确的设置优先级呢?

设置线程优先级时,针对频繁阻塞(休眠或者I/O操作)的线程需要设置较高优先级,而偏重计算(需要较多CPU时间或者偏运算)的线程则设置较低的优先级,确保处理器不会被独占。

6.设置优先级的注意事项?

在不同的JVM以及操作系统上,线程规划会存在差异,有些操作系统甚至会忽略对线程优先级的设定 (Mac OS10 Ubuntu 14.04环境 )

3.5 守护线程

1.什么是守护线程?

守护线程是程序运行的时候在后台提供一种通用服务的线程(GC)(杀毒软件实时监控)

2.守护线程的特点?

所有用户线程停止,进程才会停掉所有守护线程,然后退出程序

3.如何使用守护线程?

相关方法

方法名说明
void setDaemon(boolean on) 将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出

4.线程同步

4.1 线程安全问题-原因分析

问题产生原因: 线程执行的随机性导致的,可能在卖票过程中丢失cpu的执行权,导致出现问题

多线程01

原文:https://www.cnblogs.com/zhangmeng0726/p/14623304.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!