zoukankan      html  css  js  c++  java
  • 所谓线程安全和非线程安全

    ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。面对这样的问题,回答是:ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。这些是面试时经常问道的问题,但是有些情况下面试的人会追问:什么是线程安全,什么是非线程不安全?使用时机?

    举例来说:在一个main方法中创建一千个线程为同一个list添加元素,每个线程添加100个元素,正常情况来说在程序执行完毕的时候list的长度应该为10W。假如List的实现类是                 ArrayList(非线程安全的),那么在程序执行完毕之后List的长度是不固定的!可能为10W,但是也有可能不是10W,也有可能会发生                                                             ArrayIndexOutOfBoundsException异常。但是假如List的实现类是Vector就不会产生这种情况,其结果一定是10W条,这就是二者的区别;

    释义:

           也就是说非线程安全指的是当多个线程操作同一个对象的时候可能会出现问题,而线程安全则不会有问题;

         但是线程安全要使用到synchronized来控制线程的同步,因而线程安全相应的性能相对低下;

                  当不是多个线程访问同一个对象的时候使用非线程安全的实现类是没有问题的。

                  使用时机来说,只要是不是多个线程访问同一个对象的情况二者都可以使用

  • 相关阅读:
    lua类对象
    toLua初始化碰到的问题
    Unity经验之谈-DoTween动画结束匿名委托闭包之坑
    toLua关于委托没有注册的解决方案
    xLua使用require改变路径加载Lua脚本
    unity常用的比较函数
    Shader中颜色混合的算法
    UnityShader中插值平滑曲线
    Shader中的Uniforms(只读标识)
    ShaderLab中Properties语义块支持的属性类型
  • 原文地址:https://www.cnblogs.com/qiankun-site/p/5886726.html
Copyright © 2011-2022 走看看