问题描述
解决方案
解决方案二:
沙发自己做!
解决方案三:
synchronized
解决方案四:
也许他的意思是光synchronized这个方法不行要把整个MyLogger的对象都synchronized了就对了
解决方案五:
引用楼主dsds90的回复:以下我自己的看法,各位大虾指点:首先,可以确定这道题考的是线程安全问题,解决线程安全有多个方法,其中包括:1.+synchronized2.+锁3.应用线程安全的API等等.其次,关于StringBuilder和StringBuffer的区别最根本的不同在于:StringBuffer字符串变量(线程安全)StringBuilder字符串变量(非线程安全)一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃.StringBuffer要用在全局变量中对于答案A来说,虽然LOG方法加上synchronized后该方法确保了多线程问题,但无法保证LOGGER的数据安全,因为StringBuilder是不安全的.所以答案是B.
解决方案六:
LZ想一下,如果想你说的将Log方法变为synchronized的,这只是对该方法保证了同步,在一个线程执行该方法的时候,另一个线程是不能调用该方法的,但是当该线程正向StringBiulder类型的logger里append的时候,还没append完,该线程时间片用完,其他的线程可以访问,给它读写一些东西,这样你的程序不就冲突了吗。所以A不对
解决方案七:
log中并没有实际的方法,只是创建了stringbuilder的append方法,在执行voidlog时候,一直在做的是答案b的动作,而答案a一直什么也没做。
解决方案八:
其实StringBuffer和StringBuilder其实都有个字符串缓冲区,只是一个在缓冲区操作时不可更改,所以就实现了线程安全!StringBuilder则不能保证!因为在操作时可能发生此时的内部的String发生改变!!有什么不足的地方希望高手指正
解决方案九:
看StringBuffer的源码就知道用了大量的synchronized其他和StringBuilder差不多