读书人

Set的并发异常

发布时间: 2012-08-31 12:55:03 作者: rapoo

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();    }}
?

读书人网 >编程

热点推荐