淺談一下Java的線程并發(fā)
談到并發(fā),必會涉及操作系統(tǒng)中的線程概念,線程是CPU分配的最小單位,windows系統(tǒng)是搶占式的,linux是輪詢式的,都需要獲取CPU資源。
并行:同一時刻,兩個線程都在執(zhí)行。
并發(fā):同一時刻,只有一個線程執(zhí)行,但是一個時間段內(nèi),兩個線程都執(zhí)行了。
java中創(chuàng)建線程的三種方式,分別為集成Thread類、實現(xiàn)Runnable接口,實現(xiàn)Callable接口。
示例
public class ThreadTest { public static class MyThread extends Thread { @Override public void run() { System.out.println("This is a thread"); } } public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
public class RunnableTest implements Runnable { @Override public void run() { System.out.println("Runnable!"); } public static void main(String[] args) { RunnableTest runnableTest = new RunnableTest(); new Thread(runnableTest).start(); } }
public class CallableTest implements Callable<String> { @Override public String call() throws Exception { return "Callable!"; } public static void main(String[] args) { FutureTask<String> futureTask = new FutureTask<>(new CallableTest()); new Thread(futureTask).start(); try { String result = futureTask.get(); System.out.println(result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
CountDownLatch理解成倒計數(shù)器
場景:玩的王者榮耀,創(chuàng)建大喬、蘭陵王、安其拉、哪吒和鎧等五個玩家,主線程必須在他們都完成確認(rèn)后,才可以繼續(xù)運行。
public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(5); Thread DaQiao = new Thread(countDownLatch::countDown); Thread LanLingWang = new Thread(countDownLatch::countDown); Thread AnQiLa = new Thread(countDownLatch::countDown); Thread NeZha = new Thread(countDownLatch::countDown); Thread Kai = new Thread(() -> { try { // 稍等,上個衛(wèi)生間,馬上到... Thread.sleep(1500); countDownLatch.countDown(); } catch (InterruptedException ignored) {} }); DaQiao.start(); LanLingWang.start(); AnQiLa.start(); NeZha.start(); Kai.start(); countDownLatch.await(); System.out.println("所有玩家已經(jīng)就位!"); }
CyclicBarrier可以理解成同步屏障
場景:讓一 組線程到達(dá)一個屏障(也可以叫同步點)時被阻塞,直到最后一個線程到達(dá)屏障時,屏障才會開門,所有被屏障攔截的線程才會繼續(xù)運行。
到此這篇關(guān)于淺談一下Java的線程并發(fā)的文章就介紹到這了,更多相關(guān)Java線程并發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 重載(overload)與重寫(override)詳解及實例
這篇文章主要介紹了java 重載(overload)與重寫(override)詳解及實例的相關(guān)資料,并附實例代碼,需要的朋友可以參考下2016-10-10java 抓取網(wǎng)頁內(nèi)容實現(xiàn)代碼
這篇文章主要介紹了java 抓取網(wǎng)頁內(nèi)容實現(xiàn)代碼,需要的朋友可以參考下2014-02-02mybatis-plus返回map自動轉(zhuǎn)駝峰配置操作
這篇文章主要介紹了mybatis-plus返回map自動轉(zhuǎn)駝峰配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11spring中實現(xiàn)容器加載完成后再執(zhí)行自己的方法
這篇文章主要介紹了spring中實現(xiàn)容器加載完成后再執(zhí)行自己的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02MyBatis之傳入?yún)?shù)為list、數(shù)組、map的寫法
這篇文章主要介紹了MyBatis之傳入?yún)?shù)為list、數(shù)組、map的寫法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11