欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:9.26日工作學(xué)習(xí)記錄

柚子快報(bào)邀請碼778899分享:9.26日工作學(xué)習(xí)記錄

http://yzkb.51969.com/

List list = new CopyOnWriteArrayList<>(lists);

CopyOnWriteArrayList 是 Java java.util.concurrent 包中的一個(gè)線程安全的變體 ArrayList。

在多線程環(huán)境中,當(dāng)一個(gè)線程在迭代列表的同時(shí),另一個(gè)線程可以修改列表(添加或刪除元素),CopyOnWriteArrayList 能夠保證迭代器不會(huì)拋出 ConcurrentModificationException。這是通過創(chuàng)建底層數(shù)組的一個(gè)快照來實(shí)現(xiàn)的,迭代器將只看到快照版本,而不會(huì)受到并發(fā)修改的影響。

迭代器(Iterator)是一種設(shè)計(jì)模式,它提供了一種遍歷集合(如列表、集合)元素的方法,而不需要暴露其底層的結(jié)構(gòu)。在 Java 中,迭代器模式通常通過 Iterator 接口實(shí)現(xiàn),該接口定義了遍歷集合的基本操作,如 hasNext()、next() 和 remove()。

ConcurrentModificationException 是 Java 中的一種運(yùn)行時(shí)異常,它通常在單線程環(huán)境中拋出,當(dāng)你在迭代一個(gè)集合(如 ArrayList、LinkedList)的過程中,嘗試修改集合的結(jié)構(gòu)(添加、刪除元素)而不使用迭代器的 remove 方法時(shí),就會(huì)拋出這個(gè)異常。

這里的關(guān)鍵點(diǎn)是“迭代過程中的修改”。Java 的 ArrayList 和 LinkedList 等集合類在迭代時(shí)提供了一種檢測機(jī)制,用于識(shí)別是否在迭代過程中有其他方式(非迭代器自身)修改了集合。如果檢測到這種情況,就會(huì)拋出 ConcurrentModificationException 來防止不可預(yù)知的行為。

CopyOnWriteArrayList?是如何解決這個(gè)問題的?

CopyOnWriteArrayList 通過創(chuàng)建底層數(shù)組的快照來解決這個(gè)問題。當(dāng)?shù)鞅粍?chuàng)建時(shí),它獲取了底層數(shù)組的一個(gè)副本,而不是直接引用原始數(shù)組。這樣,即使另一個(gè)線程修改了原始數(shù)組,迭代器仍然可以安全地迭代它的快照版本,而不會(huì)被這些修改影響。

2.

CountDownLatch latch = new CountDownLatch(list.size());

`CountDownLatch` 是 Java 并發(fā)編程中的一種同步輔助工具,它允許一個(gè)或多個(gè)線程等待一組操作完成。這個(gè)類位于 `java.util.concurrent` 包中。

當(dāng)你創(chuàng)建一個(gè) `CountDownLatch` 實(shí)例時(shí),你需要傳遞一個(gè)計(jì)數(shù)器的初始值,這個(gè)值表示需要等待的操作的數(shù)量。每次一個(gè)操作完成時(shí),計(jì)數(shù)器的值就會(huì)減少,通過調(diào)用 `CountDownLatch` 的 `countDown()` 方法來實(shí)現(xiàn)。

3. **`new CountDownLatch(list.size())`**:創(chuàng)建一個(gè) `CountDownLatch` 實(shí)例,其計(jì)數(shù)器的初始值設(shè)置為 `list` 的大小。這意味著,在所有 `list` 中的元素對應(yīng)的操作完成之前,任何調(diào)用 `latch.await()` 的線程都將被阻塞。

### 使用場景

`CountDownLatch` 通常用于以下場景:

- **線程協(xié)調(diào)**:當(dāng)你有多個(gè)線程并行執(zhí)行任務(wù),并且你需要等待所有任務(wù)都完成后才能繼續(xù)執(zhí)行下一步操作時(shí)。

### 舉個(gè)例子

假設(shè)你有一個(gè)任務(wù)列表,你想要并行地處理這些任務(wù),并且只有在所有任務(wù)都完成后,你才想要執(zhí)行某些后續(xù)操作:

List> tasks = new ArrayList<>();

// 假設(shè)我們有一些任務(wù)需要提交

for (int i = 0; i < 5; i++) {

? ? tasks.add(() -> {

? ? ? ? // 執(zhí)行一些工作

? ? ? ? return null;

? ? });

}

CountDownLatch latch = new CountDownLatch(tasks.size());

ExecutorService executorService = Executors.newFixedThreadPool(5);

for (Callable task : tasks) {

? ? executorService.submit(() -> {

? ? ? ? try {

? ? ? ? ? ? task.call();

? ? ? ? } finally {

? ? ? ? ? ? latch.countDown(); // 任務(wù)完成后調(diào)用countDown

? ? ? ? }

? ? });

}

latch.await(); // 等待所有任務(wù)完成

System.out.println("所有任務(wù)已完成");

executorService.shutdown();

在這個(gè)例子中,我們創(chuàng)建了一個(gè) `CountDownLatch`,其計(jì)數(shù)器的初始值等于任務(wù)的數(shù)量。每個(gè)任務(wù)完成后,都會(huì)調(diào)用 `countDown()` 方法,將計(jì)數(shù)器的值減一。主線程調(diào)用 `latch.await()`,將會(huì)等待直到計(jì)數(shù)器的值達(dá)到零,這意味著所有的任務(wù)都已完成。

### 注意事項(xiàng)

- `CountDownLatch` 一旦計(jì)數(shù)器的值達(dá)到零,就不能再被重置。如果你需要重復(fù)使用類似的同步邏輯,可能需要?jiǎng)?chuàng)建新的 `CountDownLatch` 實(shí)例。 - `await()` 方法可以帶超時(shí)參數(shù),允許你指定等待的時(shí)間長度。 - `CountDownLatch` 是一次性的,它的計(jì)數(shù)器只能遞減,不能遞增。如果需要可以重置的計(jì)數(shù)器,可以考慮使用 `CyclicBarrier` 或 `Semaphore`。

3.

applicationContext.publishEvent(new ApartmentEvent(this, list));

這行代碼看起來是Java語言中Spring框架的一部分,用于發(fā)布一個(gè)事件。下面是這行代碼的解釋:

1. `applicationContext`:這是一個(gè)Spring的`ApplicationContext`對象,它負(fù)責(zé)管理Spring容器中的bean。

2. `publishEvent`:這是`ApplicationContext`的一個(gè)方法,用于發(fā)布事件。在Spring框架中,事件驅(qū)動(dòng)模型是一種設(shè)計(jì)模式,它允許應(yīng)用程序的不同部分之間進(jìn)行松耦合通信。

3. `new ApartmentEvent(this, list)`:這是創(chuàng)建一個(gè)新的事件對象。`ApartmentEvent`可能是一個(gè)自定義的事件類,它繼承自`ApplicationEvent`。這個(gè)構(gòu)造函數(shù)接受兩個(gè)參數(shù):`this`指的是當(dāng)前對象的引用,`list`可能是一個(gè)包含公寓信息的列表。

4. `this`:在構(gòu)造函數(shù)中,`this`通常指的是當(dāng)前對象的引用,它可能被用來傳遞當(dāng)前的上下文或者狀態(tài)信息。

5. `list`:這是一個(gè)參數(shù),可能是一個(gè)包含公寓信息的對象列表。這個(gè)列表將作為事件的一部分被發(fā)布,這樣監(jiān)聽這個(gè)事件的監(jiān)聽器就可以獲取到這些信息。

總的來說,這行代碼的作用是在Spring應(yīng)用程序中發(fā)布一個(gè)包含公寓信息列表的事件。任何注冊為監(jiān)聽這個(gè)事件的監(jiān)聽器都會(huì)接收到這個(gè)事件,并可以對它做出響應(yīng)。這通常用于實(shí)現(xiàn)事件驅(qū)動(dòng)的應(yīng)用程序,例如,當(dāng)公寓信息發(fā)生變化時(shí)通知其他系統(tǒng)組件。 ?

柚子快報(bào)邀請碼778899分享:9.26日工作學(xué)習(xí)記錄

http://yzkb.51969.com/

相關(guān)閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19518150.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄