我知道这两个 一个是线程安全的,另一个是线程不安全的,
问题是,如何用这两个写出线程不安全的代码
又如何写出线程安全的代码?
其实,Java的多线程的使用是很简单的。
随便找篇文章你都能懂得如何用,关键是得体会到同步机制在共享资源的访问中的原理。
使用方法一般有两种,一是继承Thread类,并重写其run方法。二是实现接口Runnable,实现其run方法。实例化你写的对象后,调用其start方法即可。
细节问题,请到网上自己查阅。
所谓线程安全,就是StringBuffer类在设计的时候,就考虑到一个实例被多个线程访问的时候存在同时改写的可能,为此加入同步机制(synchronized),以协调多个线程对共享资源的互斥写入。仅此而已
阁下之所以问这个问题,我想你一般是没有写过几个多线程的程序,多了解一下多线程或许您可以豁然开朗的。
你去看看jdk的源码,你会发现他们buffer的方法用了synchronized,而builder没有,线程安全就是两个线程用同一个Buffer的时候,不会出现问题,而builder会,比如A想要获取n位置的char,但B刚好删除了,这样就可能会抛空指针了
有兴趣研究下线程的话建议看看java concurrency in pratice 中文叫JAVA并发实践