集合在多线程下安全问题

如果在多线程下,同时操作同一个数据源,就会出现数据安全问题:

A线程取出值为10,准备加5.

同时B线程也取出来10,减了5

C取出的时候有可能时15,也有可能时5。产生了数据安全问题。

集合在多线程下安全问题_第1张图片

方法有很多例如:

1、自己写一个

synchronized或者lock包裹方法的数据类
    static class t {
        List list = new ArrayList<>();

        synchronized void add(String val) {
            list.add(val);
        }

        synchronized void pringt() {
            System.out.println(list);
        }
    }

 2、也是可以,或者用java的安全类:

集合在多线程下安全问题_第2张图片

CopyOnWriteArrayList类在添加时会将数据copy复制一份,添加完毕后再赋值回原容器中。

同理,set集合也是这样CopyOnWriteHashSet类

3、还有一种就是使用Vector,就是和我第一种方法一样,使用给方法加锁。

而map则是直接使用ConcurrentHashMap或者HashTable(比较慢)

你可能感兴趣的:(rpc,网络协议,网络)