zoukankan      html  css  js  c++  java
  • Java中多线程的使用(超级超级详细)线程安全原理解析 4

    Java中多线程的使用(超级超级详细)线程安全 4

    什么是线程安全?

    在这里插入图片描述

    有多个线程在同时运行,这些线程可能会运行相同的代码,程序运行的每次结果和单线程运行的结果是一样的,而且其他变量的值也和预期的值一样,这就是线程安全
    我们下面来用一段代码来演示线程不安全的情况,下面用车站卖票来举例

    package ThreadSafe;
    
    public class Main {
        public static void main(String[] args) {
        //使用同一个对象
            ThreadSafe threadSafe = new ThreadSafe();
            Thread  one = new Thread(threadSafe, "一号");
            Thread two = new Thread(threadSafe, "二号");
            Thread three = new Thread(threadSafe, "三号");
            one.start();
            two.start();
            three.start();
        }
    }
    
    package ThreadSafe;
    
    public class ThreadSafe implements Runnable {
        private  int ticketsum=100;
        public  void  run(){
          while(true){
              if (ticketsum>0){
                  try {
                      Thread.sleep(10);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  String name = Thread.currentThread().getName();
                  System.out.println(name+"正在卖:"+ticketsum--);
              }
          }
    
        }
    }
    

    结果
    在这里插入图片描述

    我们发现一号二号三号都在重复卖同一张票,这种问题在现实生活中是不被允许出现的,是会出现事故的,这就是线程不安全导致的问题

    下面我们来讲解为什么会出现线程安全问题

    线程安全原理解析

    在这里插入图片描述

    卖票出现了负数的票

    在这里插入图片描述

    卖票出现了重复的票

    在这里插入图片描述这样理解起来我当初还思考了好久,不过体验一下下面这段话后我就有点领悟了:
    多线程并不是线程并行(真正的线程并行需要多个cpu),而是通过cpu时间片轮换来完成的,所以就存在一个问题,当a线程进入线程体的时候,执行了System.out语句,这是他的时间片到期了,b线程进入,b线程在他的时间片内执行完了之后,a线程接着往下运行,他用的不是b执行过的ticket--,而是原来的ticket,就导致了问题的发生

    以上就是我对线程安全的一些理解,如果有错误还请各位批评指正,喜欢我的可以点赞收藏一波,我基本每天都会跟新文章,可以关注我互相交流

    在这里插入图片描述

  • 相关阅读:
    mybatis cache标签的参数
    debian ab压力测试环境
    Linux/debian 服务器buff/cache占用过多 清除cache脚本
    IKAnalyzerUtil中文分词
    JVM调优
    debian9 rc.local开机启动文件不存在解决方案 并开机启动tomcat容器
    spring mvc-获取 @resposeBody
    SerializeUtil 序列化工具
    JS_4DOM
    Spring_5
  • 原文地址:https://www.cnblogs.com/pjhaymy/p/13322212.html
Copyright © 2011-2022 走看看