为什么只选b不选a

本文探讨了线程安全问题及其解决方案,如使用synchronized关键字、锁机制及线程安全API等。通过对比StringBuilder与StringBuffer的特点,分析了在多线程环境下日志记录方法的正确实现方式。

问题是图片。。。。。

 

 

 

以下我自己的看法,各位大虾指点:
  首先,可以确定这道题考的是线程安全问题,解决线程安全有多个方法,
  其中包括: 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差不多

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值