91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
靖边县| 焦作市| 宜君县| 陇川县| 民丰县| 灵武市| 石门县| 沽源县| 古丈县| 枣强县| 建始县| 曲松县| 柞水县| 安塞县| 汉阴县| 康乐县| 静宁县| 广安市| 北川| 寿阳县| 乐东| 海晏县| 沿河| 巴东县| 岱山县| 嘉善县| 崇礼县| 泽普县| 惠安县| 宽甸| 临湘市| 股票| 鹤山市| 秦皇岛市| 平原县| 车致| 正定县| 新乡市| 台南市| 东海县| 高唐县|