线程安全:同步代码块

一、线程安全

如果多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程的结果一样的,而且其他的变量的值和预期的是一样的,就是线程安全的。

public class Ticker implements Runnable{
    private int ticket=100;
    public void run(){
        //获取当前程序执行所属的线程  的名称
        String threadName=Thread.currentThread().getName();

        while(true){
            if(ticket>0){
                System.out.println(threadName+"正在销售第"+ticket);
                //有票  可以卖
                //使用sleep模拟一下出票时间
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                ticket--;
            }else{
                break;
            }
        }
    }
}

 

为了保证每个线程正常执行原子操作,有三种同步的方法

1.同步代码块

synchronized关键字可以用于方法中的某个区块中,表示只对这个区块的资源实施互斥访问

synchronized (同步锁){
            需要同步的操作的代码
        }

同步锁:

对象的同步锁只是一个概念,可以想象对方为在对象上标记了一个锁。

1.锁对象:可以是任意类型

2.多个线程对象,要使用同一把锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值