解决方案 »

  1.   

    也许他的意思是光synchronized这个方法不行 要把整个MyLogger的对象都synchronized了就对了
      

  2.   


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

  3.   

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

  4.   

    log中并没有实际的方法,只是创建了stringbuilder的append方法,在执行void log时候,一直在做的是
    答案b的动作,而答案a一直什么也没做。
      

  5.   

    其实  StringBuffer  和StringBuilder其实都有个字符串缓冲区,只是一个  在缓冲区操作时不可更改,所以就实现了线程安全!
    StringBuilder则不能保证!因为在操作时  可能发生 此时的内部的String发生改变!!有什么不足的地方 希望高手指正
      

  6.   

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