同步容器的应用

启动若干线程,并行访问同一个容器中的数据。保证获取容器中数据时没有数据错误,且线程安全。
如:售票,秒杀等业务。

方式一:使用同步

public class Test1 {

    static List list = new ArrayList<>();

    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            list.add("String " + i);
        }
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                public void run() {
                    while (true) {
                        synchronized (list) {
                            if (list.size() <= 0) {
                                break;
                            }
                            System.out.println(Thread.currentThread().getName() + " - " + list.remove(0));
                        }
                    }
                }
            }, "Thread" + i).start();
        }
    }

}

方式二:使用同步容器

public class Test2 {

    static Queue list = new ConcurrentLinkedQueue<>();

    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            list.add("String " + i);
        }
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                public void run() {
                    while (true) {
                        String str = list.poll();
                        if (str == null) {
                            break;
                        }
                        System.out.println(Thread.currentThread().getName() + " - " + str);
                    }
                }
            }, "Thread" + i).start();
        }
    }

}

你可能感兴趣的:(同步容器的应用)