为什么只选b不选a

来源:互联网 发布:vba制作代码软件 编辑:程序博客网 时间:2024/05/01 19:31

问题是图片。。。。。

 

 

 

以下我自己的看法,各位大虾指点:
  首先,可以确定这道题考的是线程安全问题,解决线程安全有多个方法,
  其中包括: 1.+synchronized
            2.+锁题目
              3.应用线程安全的API 等等.
  其次,关于StringBuilder和StringBuffer 的区别
    最根本的不同在于: StringBuffer 字符串变量(线程安全)
                      StringBuilder 字符串变量(非线程安全)
    一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃.
    StringBuffer要用在全局变量中

  对于答案A来说,虽然LOG方法加上synchronized后该方法确保了多线程问题,但无法保证
  LOGGER的数据安全,因为StringBuilder是不安全的.

所以 答案是B .
=======================

LZ想一下,如果想你说的将Log方法变为synchronized的,这只是对该方法保证了同步,在一个线程执行该方法的时候,另一个线程是不能调用该方法的,但是当该线程正向StringBiulder类型的logger里append的时候,还没append完,该线程时间片用完,其他的线程可以访问,给它读写一些东西,这样你的程序不就冲突了吗。所以A不对

---------------------------

看StringBuffer的源码就知道 用了大量的synchronized 其他和StringBuilder差不多

 

原创粉丝点击