线程同步问题

什么是线程同步呢?

线程同步指的是多个线程操作同一个对象 ,如果不进行线程同步 将会报错
具体错误是 由于内存存储空间中
一块内存中存储的信息保持在同一时刻保持一致,但是被取走后信息会更新,
多个线程对于同一个对象进行操作后会导致重复错误
举个粒子
银行里面有100块钱 ,A,B 都看见有余额为100,都想取钱。
但是取钱有先来后到之说,不能够被取成负数
A取走了100块,同一时刻,B以为还有100,就取100块,因为内存是同一块所以会变成-100元 出现卡bug,为了不让银行亏钱,就需要线程同步 讲究一个先来后到之说。

关于线程同步对应的需要了解队列和锁的概念
队列的概念是指线程需要进行排队,排队后才能够对线程对象进行操作
锁的概念是指同一个对象在被线程操作时,会被锁定住,后续的对象是不能够在这一时刻,对线程对象进行操作。

以下程序已经是安全的程序了

重要的是在函数名之前加上关键字synchronized使得方法变得线程安全
synchronized默认锁定的是this的对象

package Thread;

public class UnsafeTicket implements Runnable{
   
    int num=10;
    boolean flag=true;
    @Override
    public void run() {
   
        while(flag){
   
            try {
   
                piao();//调用piao()进行方法调用
            } catch (InterruptedException e) {
   
                e.printStackTrace();
            }
        }
    }
    public synchronized void piao() throws InterruptedException {
   
        if(num<=0){
   flag=false;return;}//此处需要return;否则还会执行后续
        Thread.sleep(200);
        if(Thread.currentThread().getName().equals(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值