学习目标:
线程安全问题,加线程锁
学习内容:
线程锁是非常有必要的,例如一个购物平台的剩余商品数量,若没有线程锁控制,有可能会减为负数,可能会造成很大的影响。加线程锁可以将判断余量和减余量的操作变为原子性操作,避免错误的发生。
代码示例:
库存类
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();
}
}
}