线程的生命周期,线程安全问题

线程的生命周期

线程安全问题

* 1.问题一:卖票过程中出现重票,错票问题
* 2.问题出现原因:线程在操作过程中,其他线程也参与进来;
* 3.解决:当一个线程操作时,其他线程不能进来;
* 4.在Java中我们通过同步机制,来解决线程安全问题
* 方式一:同步代码块
* synchronized(同步监视器){
*     需要被同步的代码(操作共享数据的代码)
* }
* 同步监视器:俗称‘锁’任何一个对象都可以作为锁(多个线程必须要用同一个锁)
*     在实现接口的创建方式中,我们可以考虑this当监视器。
*     在继承类的创建方式中,不能用this充当,考虑使用当前类充当同步监视器
*
* 方式二:同步方法
* 使用同步方法解决实现接口类的线程安全问题
* public synchronized void show(){//同步监视器:this
*     操作共享数据的代码
* }
* 使用同步方法处理继承类的创建的线程安全问题
* public static synchronized void show(){//当前对象
*
* }
* 5.解决了安全问题但是同步代码段相当一个单线程;

6.使用同步机制将单例模式中的懒汉式改写成线程安全的

原懒汉模式

//懒汉式
class BankText1{
    private BankText1() {//私有化类的构造器
    }
    private static BankText1 instance=null;//声明类的对象,不初始化
    //提供公共静态方法,返回类的对象(可以直接用类名调用)
    public static BankText1 getinstance(){
        if(instance==null) {//判断是否存在对象,如果不存在则创建一个,存在则直接返回对象;
            instance = new BankText1();
        }
        return instance;
    }
}

 使用同步代码块修改之后线程安全的懒汉式单例模式

//懒汉式
class BankText1{
    private BankText1() {//私有化类的构造器
    }
    private static BankText1 instance=null;//声明类的对象,不初始化
    //提供公共静态方法,返回类的对象(可以直接用类名调用)
    public static BankText1 getinstance(){
        if(instance==null) {//如果已经创建对象,不用进入同步代码块直接返回已创建对象
            synchronized (Bank.class) {
                if (instance == null) {//判断是否存在对象,如果不存在则创建一个,存在则直接返回对象;
                    instance = new BankText1();
                }
            }
        }
        return instance;
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值