亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java列表怎樣處理并發操作

小樊
81
2024-11-22 02:01:54
欄目: 編程語言

在Java中,處理列表的并發操作需要使用線程安全的數據結構。Java提供了幾種線程安全的數據結構,如VectorCollections.synchronizedList()方法包裝的列表以及ConcurrentHashMap.newKeySet()方法返回的集合。下面是一些示例:

  1. 使用Vector:
import java.util.Vector;

public class ConcurrentListExample {
    public static void main(String[] args) {
        Vector<String> list = new Vector<>();

        // 創建兩個線程,分別向列表中添加元素
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                list.add("Thread1-" + i);
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                list.add("Thread2-" + i);
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Vector: " + list);
    }
}
  1. 使用Collections.synchronizedList()包裝列表:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ConcurrentListExample {
    public static void main(String[] args) {
        List<String> list = Collections.synchronizedList(new ArrayList<>());

        // 創建兩個線程,分別向列表中添加元素
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                list.add("Thread1-" + i);
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                list.add("Thread2-" + i);
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Synchronized List: " + list);
    }
}
  1. 使用ConcurrentHashMap.newKeySet()返回的集合:
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class ConcurrentListExample {
    public static void main(String[] args) {
        Set<String> set = ConcurrentHashMap.newKeySet();

        // 創建兩個線程,分別向集合中添加元素
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                set.add("Thread1-" + i);
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                set.add("Thread2-" + i);
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("ConcurrentHashMap KeySet: " + set);
    }
}

注意:在使用Collections.synchronizedList()包裝列表時,需要注意對整個操作進行同步,以避免并發問題。例如,在上面的示例中,我們使用了join()方法來等待兩個線程完成操作。而在使用ConcurrentHashMap.newKeySet()時,由于它本身是線程安全的,因此不需要額外的同步措施。

0
通城县| 即墨市| 土默特左旗| 砀山县| 冷水江市| 平舆县| 丰台区| 牙克石市| 吴川市| 郁南县| 墨江| 乐安县| 都昌县| 石泉县| 福建省| 会理县| 呼和浩特市| 济源市| 昭觉县| 拉萨市| 宣化县| 甘孜| 内黄县| 龙江县| 河南省| 平原县| 延寿县| 四平市| 平罗县| 靖边县| 邹城市| 林周县| 洛宁县| 隆林| 湘乡市| 大城县| 彭水| 利津县| 达孜县| 大港区| 铜鼓县|