线程安全问题,加线程锁

本文主要探讨Java中多线程环境下出现的线程安全问题,并通过示例讲解如何使用线程锁来确保数据一致性。通过学习,读者将理解线程锁的概念及其在实际代码中的应用。

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

学习目标:

线程安全问题,加线程锁

学习内容:

	线程锁是非常有必要的,例如一个购物平台的剩余商品数量,若没有线程锁控制,有可能会减为负数,可能会造成很大的影响。加线程锁可以将判断余量和减余量的操作变为原子性操作,避免错误的发生。

代码示例:

库存类

public class KuCun {
public int num=100;
}

销售线程类:

public class SellRunnable implements Runnable{
	KuCun kuCun;
	public SellRunnable(KuCun kuCun){
		this.kuCun=kuCun;
	}
	@Override
	public void run() {
		while(true){
		// **加一把锁,表示锁住的逻辑同时只能让一个线程来执行**
		synchronized (SellRunnable.class) {
			
		
			if(kuCun.num>0){
				try {
					Thread.sleep(50);
					kuCun.num-=1;
					System.out.println(kuCun.num);
				} catch (Exception e) {
					
				}
				
			}
		}
		}
		
	}

}

测试类:

public class Test {
public static void main(String[] args) {
	KuCun kuCun = new KuCun();
	for(int i=0;i<10;i++){
		new Thread(new SellRunnable(kuCun)).start();
	}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值