多线程安全

什么时候会出现安全问题:

当多个线程对同一个共享数据执行操作的时候

案例

火车票的购买

package xianc;

import lombok.val;

/**
 * Created by LI WAN on 2019/1/16.
 * 实现Runnable接口
 * 当多个线程操作同一个共享数据的时候
 * 会引发安全问题 需要加同步锁
 */
public class Demo3 implements Runnable{
    //静态的方法中必须使用静态的成员变量
    private static Integer sum = 200;

    @Override
    public void run() {
        //当多线程共同操作同一份数据使用同步锁为了防止数据重读
        synchronized (Demo3.class){
        for (int i = 0; i < 200; i++) {
            //如果sum>0 说明有票
            if (sum>0){
                //每循环一次 sum--
                sum--;

                System.out.println("抢票成功! 剩余"+sum+"张"+"-----"+Thread.currentThread().getName());
                try {
                    //每循环一次睡眠多长时间
                    Thread.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        }
    }
}

class DemoTest3{
    public static void main(String[] args) {
	
		//某1
        //实例化多线程类
        Demo3 d1 = new Demo3();
        //实例化调用Thread 中的start方法
        Thread t1 = new Thread(d1);
        //调用start方法启动
        t1.start();
        
		//某2
        Demo3 d2 = new Demo3();
        Thread t2 = new Thread(d2);
        t2.start();

		//某3
        Demo3 d3 = new Demo3();
        Thread t3 = new Thread(d3);
        t3.start();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值