StringBuffer是线程安全吗?我有例子说它不是安全的。
- Java code
public class StringBufferTest { private StringBuffer contents = new StringBuffer(); public void log(String message){ contents.append(System.currentTimeMillis()); contents.append("; "); contents.append(Thread.currentThread().getName()); for(int i=0;i<10000;i++){ contents.append(i); contents.append(message); contents.append("\n"); } contents.append("\n\n\n"); } public void getContents(){ System.out.println(contents); }}class RunThread extends Thread{ String message; StringBufferTest buffer; public RunThread(StringBufferTest buffer, String message){ this.buffer = buffer; this.message = message; } public void run(){ while(true){ buffer.log(message); buffer.getContents(); } } public static void main(String[] args) { StringBufferTest ss = new StringBufferTest(); new RunThread(ss, "love").start(); new RunThread(ss, "make").start(); new RunThread(ss, "you").start(); }}[解决办法]
不是线程安全的。
因为StringBuffer中的方法可以修改本身。
[解决办法]
我的沙发。
[解决办法]
[解决办法]
StringBuffer是线程安全的,里面的方法用了synchronized修饰,也就是单线程的
我按lz的例子跑了一下,结果还是证明了。
我不知道lz是如何操作的,显示的结果如何?
[解决办法]
StringBuffer是线程安全的啊,
我这里也显示正常啊,不知道lz是怎么操作的,
StringBuilder才不是线程安全的,
[解决办法]
[解决办法]
StringBuilder才不是线程安全的
StringBuilder和StringBuffer的方法是一模一样,就是一个多线程和一个单线程的问题
[解决办法]
我都不知道你是怎么认为StringBuffer不是线程安全的
[解决办法]
楼主的例子不用跑,结果就很明显,只是你的例子不能证明StringBuffer是线程不安全的啊。
你的例子核心就是多线程调用同一StringBuffer 的append方法,这跟他是不是线程安全不搭尬呀,除非你的结果是append的一系列字符串变乱了,那才能说明他是线程不安全的。 不明白可以再问。
[解决办法]
[解决办法]
这个例子 应该有可能出现最后getContents()方法 出来的数据显示是乱的吧
多个线程拿到同一个对象StirngBuffer , 同时调用同一个方法 , A线程执行appand()以后 接着 B线程执行
appand() 最后数据就是乱的了 这个情况还是有的吧
线程安全 并不是说他的一系列操作是同步的 只是对于他执行某个方法的时候不允许别的线程去改变
大家给意见 是不是这样
[解决办法]
[解决办法]