作為後端工程師,我們面臨異步處理數據的情況。 今天讓我們看看它是如何在java中完成的以及各種方法。

Thread

Java並發的最基本但又如此強大的組件是 Thread. Java的線程實際上與操作系統的線程相關聯。 創建一個非常基本的方法 Thread 是通過擴展它並覆蓋 run

啟動線程會導致 run() 被稱為。
你可能會問; 是的,Thread 有很多其他可以被覆蓋的方法:

  • 大多數情況下,我們不想重寫線程的其他方法。
  • 一旦我們擴展 Thread 類,擴展類失去了進一步擴展的能力,因為 Java 不支持多重繼承。
  • 當我們擴展它時,每個線程都有自己的對象,當有大量線程時,這對內存健康不利 Objects of the extended Thread 創建的。

Java 使用 Runnable 接口解決了這些問題。 實際上, Thread 有一個採用 Runnable 的重載方法。

Runnable

Runnable 是一個只有一個方法的接口: run(). 是的,Runnable 是一個函數式接口,它的實例可以用 lambda 函數創建。 然而,這是一種簡單的方法。 對於復雜的事情,我們可能想實現它。 看看這裡的區別。 這都是關於要求的:

雖然 Runnable 有一個 run(),它不是一個線程,而只是一個 Java 類,直到它被(傳遞給)線程控制。 線程的啟動導致可運行對象的 run() 被稱為。

是的,Java 在 1.5 版中解決了這個問題,它是 Callable

Callable<V>

Callable 是一個通用接口。 為什麼? 運行此命令的返回值作為通用運行此命令。 Callable 也是一個功能接口,並且 call() 是唯一的方法,一個無參數的方法,它拋出異常並返回通用運行這個命令值。

實現 Callable 與 Runnable 非常相似:

看到這裡,調用處理數據並返回一個可以在執行後收集的值。 但是調用它有很大的不同嗎? 我們用 ExecutorService 調用和 Future 保持結果。 讓我們談談為什麼。

如您所見,創建和運行線程(也可運行或可調用)沒有受控行為。 我們可能希望控制一次運行的線程數,因為它們中的每一個都與操作系統的線程相關聯。 我們運行的線程數應該少於可用的 CPU 內核數。 總之,Java 解決了這個問題 ExecutorService 界面。
以上是一篇關於 Java中的異步編程:第一部分.
如果您對我們上面分享的說明有任何疑問,請隨時通過評論部分與我們聯繫。