第十四章 多线程2

2024-09-01 12:58
文章标签 多线程 第十四章

本文主要是介绍第十四章 多线程2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

14.1 线程间通信

多个线程处理同一资源,但任务不同。


14.2 等待唤醒机制

wait(), notify(), notifyAll()

这些监视器方法定义在Object类中。使用时必须定义在同步中,且应明确操作于哪个锁上的线程。


14.3 多生产者多消费者问题

while多次循环 判断标志,以选择继续运行或者wait().

notifyAll唤醒,避免while中wait引发的死锁。


14.4 Lock接口

提供了比synchronized方法或语句更广泛与灵活的锁定操作。

Lock lock = new xxxLock();
function {
lock.lock();
//code...
lock.unlock(); //若有可能抛出异常,unlock放到finally语句
}


14.5 condition接口

将Object的wait(),notify(),notifyAll(),分解成不同的对象,以便将这些对象与Lock组合使用

await(), signal(), signalAll();

condition c1 = lock.newCondition();
condition c2 = lock.newCondition();


14.6 wait和sleep的区别
1)wait可以不指定时间;sleep必须指定时间。
2)在同步中:wait释放执行权,释放锁;sleep释放执行权,不释放锁。

14.7 停止线程的方式
1)run()结束
2)stop()将释放其锁定的所有监视器,可能使受这些监视器保护的对象处于不一致的状态。

如何控制线程任务的结束:
任务中都有循环结构,通过控制循环控制线程结束。
while(flag) 定义标记。

如果线程处于冻结状态,将无法读取标记判断,则使用interrupt()将线程从冻结状态中恢复到1运行状态,并抛出interruptedException

14.8 线程的其他方法
1)setDaemon() 将线程标记为守护线程或用户线程
2)join() 该线程申请加入运行,并等待该线程终止
3)setPriority()优先级1-10,三个常量MAX_PRIORITY,MIN_PRIORITY,NORM_PRIORITY
4) yield()暂定、切线程





这篇关于第十四章 多线程2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1127007

相关文章

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro