11.多线程

时间:2021-09-09 01:43:42   收藏:0   阅读:39

多线程

11.1 实现多线程:

进程是程序的一次动态执行过程。
多进程操作系统能同时运行多个进程(程序)
多线程是实现并发机制的一种有效手段。
Java实现多线程方式:1)继承Thread类;2)实现Runnable接口
这两种实现方式都要重写run方法,Runnable接口需要实例化Thread对象,Thread类的继承可以直接调用start
线程对象的五种状态:创建、就绪、运行、阻塞、终止
Java程序每次执行至少启动两个线程,使用Java命令执行一个类时,实际上都会启动一个JVM,每一个JVM实际上就是在操作系统中启动一个线程,
Java本身具备垃圾的收集机制,所以在Java运行时至少会启动两个线程,一个是main线程,另一个是垃圾收集线程。

进程(正在运行的程序):

线程(是进程中的单个顺序控制流,是一条执行路径):

多线程实现方式:

Thread类相关知识:

定义一个MyThread类继承Thread类,重写run方法,创建MyThread类的对象,调用start方法

获取线程名称:getName()

设置线程名称:setName()

获取当前正在执行的线程对象引用:Thread.currentThread()

线程调度模型:

设置和获取线程优先级:

设置线程的优先级只能让线程获得CPU的几率更高,不能保证线程优先获得CPU

线程控制:

线程生命周期:

创建线程对象 -> 有执行资格,没有执行权 -> 有执行资格,有执行权 -> 线程死亡,变成垃圾

Runnable接口相关知识:

相比继承Thread类,实现Runnable接口好处:

11.2 线程同步:

卖票问题:三个窗口同时出售一百张票

出现问题:在调用sleep方法让线程执行一次等待一百毫秒的情况下,可能出现同一张票售卖多次和出现负数票的情况

原因:多线程环境、有共享数据、有多条语句操作共享数据

解决:同步代码块(锁多条语句操作共享数据,可以使用同步代码块实现)synchronized

同步的好处和弊端:

同步方法:把synchronized关键字加到方法上(锁的对象 - this)

同步静态方法:把synchronized加到静态方法上static后面(锁的对象 - 类名.class)

线程安全的类:

StringBuffer,可变字符序列,StringBuilder的老版,具有线程同步的特点,

Vector,实现了对象数组,ArrayList的老版,具有线程同步的特点

Hashtable,实现了哈希表,HashMap的老版,具有线程同步的特点

Collections.synchronizedList (new ArrayList<>())

Collections.synchronizedMap (new HashMap<>())

Lock锁:

Lock实现提供比使用synchronized方法获得更广泛的锁定操作

Lock是接口,不能直接实例化,ReentrantLock是他的实现类

try...finally...块来进行Lock的加锁、解锁操作,防止加锁之后代码出问题不能解锁情况

11.3 生产者消费者:

生产者消费者模式是一个典型的多线程协作的模式

生产者:用于生产数据

消费者:用于消费数据

wait(等待)、notify(唤醒单个)notifyAll(唤醒所有线程)

使用wait和notify的方法需要标记成synchronized

生产者消费者包含的类:

原文:https://www.cnblogs.com/zhongshu/p/15239599.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!