一、线程的安全问题 点击此处返回总目录 二、同步代码块的方式,解决线程安全问题 三、同步方法的方式,解决线程安全问题 四、Lock接口的方式,解决线程安全问题 五、死锁 六、线程的等待与唤醒
注:关于同步互斥的概念,一定要看操作系统。
一、线程的安全问题 多个线程同时操作一个共享数据,可能会出现安全问题。比如下面的程序:
//Ticket.java
//Test.java
运行结果: Thread-2sold:3 结果分析: 按照尝试来讲,卖出3,2,1之后就应该停止了。但是程序还多卖了两张。这就是线程不安全问题。 当线程1运行到1处时,发现还有1张票。然后就准备卖,但是还没卖。这时候线程2进来了,发现还是有1张票。于是就卖了,票数就变成了0。当线程2运行完之后,线程1继续执行,结果就导致变成了-1。
二、同步代码块的方式,解决线程安全问题 为了解决安全问题,java提供了同步技术,保证安全性。
公式: synchronized(同步锁){ 线程要操作的共享代码段 }
同步代码块的原理: 同步锁可以是任意的对象,专业词汇叫对象监视器。 没有锁的线程不能执行,只有等待。先获取锁,然后执行,最后释放锁。
使用: //Ticket.java
//Test.java
|
多线程(2)----线程的同步互斥
最新推荐文章于 2022-08-08 17:26:40 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)