當一個類已經很好的同步以保護它的數據時,這個類就稱為“線程安全的”。
即使是線程安全類,也應該特別小心,因為操作的線程是間仍然不一定安全。import?java.util.Collections;
import?java.util.LinkedList;
import?java.util.List;
public?class?TestThread?{
????public?static?void?main(String[]?args)?{
????????final?NameList?nl?=?new?NameList();
????????nl.add("aaa");
????????class?NameDropper?extends?Thread?{
????????????public?void?run()?{
????????????????String?name?=?nl.removeFirst();
????????????????System.out.println(name);
????????????}
????????}
????????Thread?t1?=?new?NameDropper();
????????Thread?t2?=?new?NameDropper();
????????t1.start();
????????t2.start();
????}
}
class?NameList?{
????private?List?nameList?=?Collections.synchronizedList(new?LinkedList());
????public?void?add(String?name)?{
????????nameList.add(name);
????}
????public?String?removeFirst()?{//removeFirst方法必須同步
????????if?(nameList.size()?>?0)?{
????????????try?{
????????????????Thread.sleep(100);
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????????return?(String)?nameList.remove(0);
????????}?else?{
????????????return?null;
????????}
????}
}
import?java.util.LinkedList;
import?java.util.List;
public?class?TestThread?{
????public?static?void?main(String[]?args)?{
????????final?NameList?nl?=?new?NameList();
????????nl.add("aaa");
????????class?NameDropper?extends?Thread?{
????????????public?void?run()?{
????????????????String?name?=?nl.removeFirst();
????????????????System.out.println(name);
????????????}
????????}
????????Thread?t1?=?new?NameDropper();
????????Thread?t2?=?new?NameDropper();
????????t1.start();
????????t2.start();
????}
}
class?NameList?{
????private?List?nameList?=?Collections.synchronizedList(new?LinkedList());
????public?void?add(String?name)?{
????????nameList.add(name);
????}
????public?String?removeFirst()?{//removeFirst方法必須同步
????????if?(nameList.size()?>?0)?{
????????????try?{
????????????????Thread.sleep(100);
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????????return?(String)?nameList.remove(0);
????????}?else?{
????????????return?null;
????????}
????}
}
http://lavasoft.blog.51cto.com/62575/99155