2025年java基础库中线程安全函数

java基础库中线程安全函数目录 一 分析线程安全 1 通过实现 Runnable 接口 2 通过继承 Thread 类 3 继承 Thread 类创建线程与实现 Runnable 接口创建线程的区别 4 线程状态 二 死锁 1 概述 2 锁嵌套 三 生产者和消费者的线程安全 四 线程池 概述 应用 Callable 接口 同步 异步在多线程中的体现 一 分析线程安全 在多线程中

大家好,我是讯享网,很高兴认识大家。



目录

一、分析线程安全

1.通过实现Runnable接口

2.通过继承Thread类

3.继承Thread类创建线程与实现Runnable接口创建线程的区别

4.线程状态

二、死锁

1.概述:

2.锁嵌套

三、生产者和消费者的线程安全

四、线程池

概述:

应用:

Callable接口

同步、异步在多线程中的体现


一、分析线程安全

在多线程中,出现了共享数据,需要加锁处理;锁的注意事项: 1.同一个锁对象 2.锁的范围

实现任务案例:买票系统,5个窗口共卖1000张票;观察卖票过程

1.通过实现Runnable接口

 
讯享网 

2.通过继承Thread类

继承案例:

讯享网

3.继承Thread类创建线程与实现Runnable接口创建线程的区别

实现任务 VS 继承Thread

实现任务java基础库中线程安全函数:

里面的属性是共享数据;同步锁可使用this;获取线程名需使用Thread.currentThread().getName()

继承Thread:

属性+static才是共享数据;同步锁不能使用this;获取线程名直接使用getName()

4.线程状态

线程状态---阻塞

基本状态---启动状态 等待状态----sleep,join

阻塞状态:在执行的现在中加锁,进入阻塞状态;其他线程只能等待; 等待释放锁资源后,其他就绪状态线程才能继续执行

二、死锁

1.概述:

加了锁之后,有一个线程进到锁里面没有出来,导致锁资源没有得到释放,其他线程一直等待锁资源的释放,这样就导致了死锁的产生

同步代码块和同步方法都是自动释放锁资源,所以不容易出现死锁;如果需要演示死锁案例;在同步锁中需要进行锁嵌套;

注意:此处只是为了测试死锁,才进行的锁嵌套; 以后使用时尽量避免锁嵌套(避免死锁)

2.锁嵌套

代码解释:当一个线程执行到锁A后,另一个线程进入锁B,导致进入到锁A中的线程一直等待锁B资源的释放,而锁B一直等待锁A资源的释放,A里面有B想要的,B里面有A想要的,但是彼此都是倔脾气谁都不肯低头,谁都等对方道歉还回来资源,导致这是一个死局,这就是死锁产生,所以我们要避免使用锁嵌套,因为容易产生死锁

死锁案例:

 

三、生产者和消费者的线程安全

生产者和消费者的线程安全模型,代表类很多种应用中的场景; 例如:生活中的生产产品入库;消费产品出库;

生产者和消费者案例:

//案例:生产者消费者线程案例,生产者一直负责生产,消费者一直负责消费
//分析:生产者线程和消费者线程都操作同一个库存(共享数据)
//问题:
//1.会出现还没有等到生产,就已经消费了的情况  
//2.数据混乱:生产者线程数量+1后,直接打印出了消费数据

//处理方案:
//数据混乱--需要加锁来解决
//没有生产提前消费的问题:线程等待的功能,判断件数为0,一直等待,无限期等待,直到发指令
//wait()--等待;  notify--唤醒(唤醒等待)

main方法:

讯享网

生产者:

 

消费者:

 

仓库:仓满和仓空由库存决定--在库存中判断

 

四、线程池

概述:

线程池:就是装线程的容器,预先在容器中创建指定个数的线程对象;当用户需要时,直接俄从容器中获取;用完了,再回收到线程池中(用完了放回去

之前创建线程的方式:创建线程对象后,执行完毕则销毁线程对象;如果程序中需要频繁创建线程时,会非常影响性能及消耗内存的资源(用完了就丢

好处:减少了创建和销毁线程的数目,提升了性能及减少了资源的消耗

线程池的复用机制:线程对象使用完后,重新再回到线程池;可以交给其他用户继续使用

内部实现:创建集合,集合中都是存线程对象;有用户使用,则添加回集合中

应用:

代码解释:指定线程池中两个线程,然后开启了三个任务,两个线程先执行两个任务,谁先执行完就去执行第三个任务

 

Callable接口

在线程池的执行中,有两个接口表示执行线程任务的接口;Runnable和Callable接口

区别:Callable接口可以带返回值;线程的执行结果需要返回时,可以选择Callable

线程池的执行,通过Runnable接口、 Callable接口来 创建任务 ,而不是继承Thread类

案例:

 

同步、异步在多线程中的体现

问题:什么是异步?,什么是同步?,在多线程中如何体现的?

异步:多个线程并发执行--随机互抢资源

同步:加了同步锁,只运行一个线程执行

小讯
上一篇 2024-12-25 07:53
下一篇 2024-12-26 12:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/3695.html