Set的并发异常
Set的并发错误
package test; import java.util.Collections; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Main { private Set<Integer> set = Collections .synchronizedSet(new TreeSet<Integer>()); public Main() { super(); } public void print() { // System.out.println("print:"+Thread.currentThread().getName()); Iterator<Integer> it = set.iterator(); while (it.hasNext()) { Integer num = it.next(); System.out.print(num); } } public void add(int i) { // System.out.println("add:"+Thread.currentThread().getName()); set.add(i); } public void remove(int i) { // System.out.println("rempove:"+Thread.currentThread().getName()); if (set.contains(i)) { set.remove(i); } } /** * @param args */ public static void main(String[] args) { final Main main = new Main(); Runnable run1 = new Runnable() { @Override public void run() { while (true) { main.print(); System.out.println(""); } } }; Runnable run2 = new Runnable() { @Override public void run() { while (true) { for (int i = 0; i < 10; ++i) { main.add(i); } } } }; Runnable run3 = new Runnable() { @Override public void run() { while (true) { for (int i = 0; i < 10; ++i) { main.remove(i); } } } }; new Thread(run1).start(); new Thread(run2).start(); new Thread(run3).start(); } }