淺談一下Java的線程并發(fā)
談到并發(fā),必會(huì)涉及操作系統(tǒng)中的線程概念,線程是CPU分配的最小單位,windows系統(tǒng)是搶占式的,linux是輪詢式的,都需要獲取CPU資源。
并行:同一時(shí)刻,兩個(gè)線程都在執(zhí)行。
并發(fā):同一時(shí)刻,只有一個(gè)線程執(zhí)行,但是一個(gè)時(shí)間段內(nèi),兩個(gè)線程都執(zhí)行了。
java中創(chuàng)建線程的三種方式,分別為集成Thread類、實(shí)現(xiàn)Runnable接口,實(shí)現(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理解成倒計(jì)數(shù)器
場(chǎng)景:玩的王者榮耀,創(chuàng)建大喬、蘭陵王、安其拉、哪吒和鎧等五個(gè)玩家,主線程必須在他們都完成確認(rèn)后,才可以繼續(xù)運(yùn)行。
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 {
// 稍等,上個(gè)衛(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可以理解成同步屏障
場(chǎng)景:讓一 組線程到達(dá)一個(gè)屏障(也可以叫同步點(diǎn))時(shí)被阻塞,直到最后一個(gè)線程到達(dá)屏障時(shí),屏障才會(huì)開門,所有被屏障攔截的線程才會(huì)繼續(xù)運(yùn)行。
到此這篇關(guān)于淺談一下Java的線程并發(fā)的文章就介紹到這了,更多相關(guān)Java線程并發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于synchronized修飾靜態(tài)和非靜態(tài)方法
這篇文章主要介紹了基于synchronized修飾靜態(tài)和非靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
java實(shí)現(xiàn)圖片轉(zhuǎn)base64字符串 java實(shí)現(xiàn)base64字符串轉(zhuǎn)圖片
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片轉(zhuǎn)base64字符串,java實(shí)現(xiàn)base64字符串轉(zhuǎn)圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
JAVA實(shí)現(xiàn)掃描線算法(超詳細(xì))
掃描線算法就是從Ymin開始掃描,然后構(gòu)建出NET,之后根據(jù)NET建立AET。接下來本文通過代碼給大家介紹JAVA實(shí)現(xiàn)掃描線算法,感興趣的朋友一起看看吧2019-10-10
使用Spring Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的代碼詳解
在現(xiàn)代Web應(yīng)用開發(fā)中,數(shù)據(jù)校驗(yàn)是不可忽視的重要環(huán)節(jié),Spring提供了強(qiáng)大的數(shù)據(jù)校驗(yàn)框架——Spring Validation,可以有效提升數(shù)據(jù)輸入的安全性與應(yīng)用的穩(wěn)定性,本文將介紹如何使用Spring Validation進(jìn)行數(shù)據(jù)校驗(yàn),幫助您深入理解和靈活應(yīng)用這一技術(shù)2024-11-11
springboot項(xiàng)目配置swagger2示例詳解
Swagger是一款RESTful接口的文檔在線自動(dòng)生成、功能測(cè)試功能框架。本文重點(diǎn)給大家介紹springboot項(xiàng)目配置swagger2示例代碼詳解,需要的朋友參考下吧2021-09-09

