zoukankan      html  css  js  c++  java
  • 线程同步引发的安全问题

    多线程可以提高粗cpu的效率,但也会引入分访问冲突。

    /*两个线程共同访问同一资源,导致访问冲突,出现预期想法不一致的结果。

    因为当thread 访问资源时,进入线程体,执行run(),如果此时bufCache=1,二thread进入休眠,

    thread1也进入线程体。

    等待thread休眠时间到了,bufCache-- = 0;

    而Thread1也从休眠醒来,bufCache-- = -1,输入bufCache =0;与实际不符。

    这就是多个线程同时访问同一资源,导致线程安全问题。

    */

    解决办法:加入线程同步机制,

        使用Synchronized关键字来确保在同一时刻只有一个线程访问同一资源,

        而其他线程只有等待此线程释放该资源才可以执行。

      1使用synchronized关键字描述要访问的方法

          public sychornized void run(){}

      2 使用synchronzed关键字描述要访问的快

          sychronized (this){

            if(bufCache>0){

                  try{

                      System.out.println("当前正在运行的线程是:" +Thread.currentThread().getName());
                      Thread.sleep(1000);
                 }catch(Exception e){
                      e.printStackTrace();
                 }
                 System.out.println(Thread.currentThread().getName()+"缓冲区的大小:"+bufCache--);
              }

          }

      在多个线程访问同一obj时,执行到该程序时,则对Obj加锁2,其他线程只有等待obj解锁才可以执行

    加入synchronized关键字的区别:

        相等于线程进入休眠时也抱着资源(将该资源加上一把锁)不允许其他人使用,

        保证了同一时刻只有一个线程访问同一资源。

  • 相关阅读:
    华为OJ平台——DNA序列
    华为OJ平台——整数的二进制中1的个数
    华为OJ平台——首次不重复字符
    Unity-iPhone has Conflicting Provisioning Settings
    升级MAC OS到10.13, 10.14系统后UNITY工程无法加载资源的解决办法
    Unity各平台内置宏定义
    Xcode官方xip直接离线下载地址(更新到Xcode 9.4.1)
    Machine Learning In Action
    Unity3D Errors And Fix
    Crash for small compressed texture on some Android device
  • 原文地址:https://www.cnblogs.com/chengbao/p/4793573.html
Copyright © 2011-2022 走看看