性能测试监控-Java线程监控线程阻塞案例

线程的五种状态

新建:new
运行:runnable
等待:waitting(无限期等待),timed waitting(限期等待)
阻塞:blocked
结束:terminated

线程阻塞

在多线程情况下,如果一个线程对拥有某个资源的锁,那么这个线程就可以运行资源相关的代码。而其他线程就只能等待其执行完毕后,才能继续争夺资源锁,从而运行相关代码。 

场景

车票售卖系统,当前剩余车票1张,此时有A、B、C、D四个用户同时来购票,系统开启了四个线程来执行业务操作

  1. A线程刚执行了step1;
  2. CPU将执行权切换到B线程,B线程顺利地执行了step1和step2,此时剩余票数为0;
  3. CPU将执行权又切换到A线程,A线程继续执行step2,此时票数为-1,多卖出一张票!出现异常业务数据。

这种情况就是多线程模式下的数据安全问题。

解决方案

在多线程的情况下,如果存在修改共享数据的操作,就要对操作步骤进行加锁,拥有锁的线程才可以执行相关代码。没有锁的线程只能等待其释放锁后,才有资格继续执行代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值