java-知识5

本文探讨了进程与线程的区别,重点讲解了线程的创建、命名、调度以及线程安全问题。通过实例解析了如何设置线程名称、理解守护线程和线程生命周期,并介绍了线程同步的重要性,包括同步代码块和同步方法的应用。最后,针对售票系统中的数据安全问题,我们讨论了解决策略,如使用synchronized和Lock锁机制来确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程

在这里插入图片描述

线程

在这里插入图片描述

多线程实现方式在这里插入图片描述

在这里插入图片描述

设置和获取线程名称

在这里插入图片描述
如果没有设置线程名称,会有默认名称Thread-num(num是数字值)
也可已通过带参构造方法在创建对象的时候给线程赋予名称
currentThread()方法可以返回当前正在执行的线程对象

线程调度

多线程程序执行有随机性,单个线程抢到CPU时间片才能执行
在这里插入图片描述
在这里插入图片描述

线程控制

在这里插入图片描述
Thread.currentThread().setName(“name”);
设置当前线程的名称
当主线程执行完毕,java虚拟机就会退出,守护线程退出,但不会立即消失

线程生命周期

在这里插入图片描述

实现方式2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线程同步

案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思考

线程的执行随机性导致售票以下两个数据安全问题
在这里插入图片描述
在这里插入图片描述

为什么会出现数据安全问题

在这里插入图片描述

如何解决安全问题

破坏以上三个条件中的一个
在这里插入图片描述

同步代码块解决

同步代码块加锁注意任意对象需要是同一对象,不然没有锁的效果
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

同步方法解决数据安全问题
同步静态方法的锁对象是类的字节码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线程安全类

StringBuffer—StringBuilder
Vector—ArrayList
Hashtable—HashMap

三对类对比来看,前者的方法都加了synchronized都是同步方法,后者都没有加
在这里插入图片描述
通常Vector和Hashtable会被如下方法替代,同理可获得Set的线程安全类
在这里插入图片描述

Lock锁

在这里插入图片描述
在这里插入图片描述
使用try……finally是为了确保最终unlock能够被执行,确保锁能被释放

生产者和消费者问题

在这里插入图片描述
使用wait和notify方法必须要在存在锁对象的情况下
在这里插入图片描述

案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值