老生常談…對(duì)于大佬們根本都不用看的博客!
對(duì)于像我這種菜雞還是得一步一步的來(lái)!如果有錯(cuò)誤請(qǐng)大佬們指點(diǎn)指點(diǎn)!
并行和并發(fā)在操作系統(tǒng)中,并發(fā)是在一段時(shí)間內(nèi)宏觀上有多個(gè)程序同時(shí)運(yùn)行,在是單CPU的系統(tǒng)上,每一時(shí)刻只能有一個(gè)程序在運(yùn)行,但是這些程序是分時(shí)交替運(yùn)行的,給人一種同時(shí)運(yùn)行的錯(cuò)覺(jué)。交替的時(shí)間非常非常短。而在多CPU系統(tǒng)中,這些程序可以分配到多個(gè)CPU上進(jìn)行運(yùn)行,實(shí)現(xiàn)了多任務(wù)并行運(yùn)行。
所以多核CPU,核越多,并行處理的程序越多,能夠大大的提高電腦的運(yùn)行效率。
單核CPU:只能并發(fā)
多核CPU:并發(fā)+并行
通俗理解:
并行:很多工作分配給很多工人一起執(zhí)行,然后在進(jìn)行匯總;
并發(fā):一個(gè)工人要干很多工作,輪到哪個(gè)工作就執(zhí)行哪個(gè)工作;工人相當(dāng)于資源,這些工作搶這個(gè)工人。
注意(重點(diǎn)要考):進(jìn)程是操作系統(tǒng)調(diào)度和分配資源的最小單位,線程是CPU調(diào)度的最小單位。不同的進(jìn)程之間不共享內(nèi)存,進(jìn)程之間的可以進(jìn)行通信但成本很高。而不同的線程也有自己獨(dú)立的內(nèi)存空間,對(duì)于方法區(qū)、堆中的同一個(gè)對(duì)象的內(nèi)存,線程之間可以共享,但棧的局部表里永遠(yuǎn)是獨(dú)立的。
了解線程調(diào)度
只要知道5中狀態(tài)就可以:新建,就緒,阻塞,運(yùn)行,死亡。
JAVA通過(guò)調(diào)用Thread類來(lái)進(jìn)行多線程的編寫,每個(gè)線程都要重寫run()方法來(lái)進(jìn)行操作,run()方法也被稱為線程體。然后我們通過(guò)調(diào)用start()方法來(lái)啟動(dòng)線程,切記并非直接調(diào)用run().
創(chuàng)建方式public class TestThread extends Thread {
//重寫線程體
@Override
public void run() {
for (int i = 0; i< 50; i++) {
System.out.println(Thread.currentThread().getName() + ":run--" + i);
}
}
}
public class Test {
public static void main(String[] args) {
//創(chuàng)建線程對(duì)象
TestThread thread = new TestThread();
//調(diào)用start啟動(dòng)線程
thread.start();
//main的方法用來(lái)體現(xiàn)交叉運(yùn)行的結(jié)果
for (int i = 0; i< 50; i++) {
System.out.println(Thread.currentThread().getName() + ":run--" + i);
}
}
}
我們需要通過(guò)用main方法進(jìn)入運(yùn)行程序,main方法就相當(dāng)于程序的入口。
來(lái)展示一下運(yùn)行的結(jié)果:
public class TestRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i< 50; i++) {
System.out.println(Thread.currentThread().getName() + ":run--" + i);
}
}
}
public class Test {
public static void main(String[] args) {
//創(chuàng)建runnable的實(shí)現(xiàn)類的對(duì)象
TestRunnable runnable = new TestRunnable();
//然后放入Thread類中,需要幾個(gè)線程就創(chuàng)建幾個(gè)
Thread thread1 = new Thread(runnable);
Thread thread2 = new Thread(runnable);
thread1.start();
thread2.start();
}
}
運(yùn)行結(jié)果如下:
區(qū)別:
為什么會(huì)有優(yōu)先級(jí)?就相當(dāng)于人為什么分為三六九等一樣!優(yōu)先級(jí)越高的線程就會(huì)獲得更多的執(zhí)行機(jī)會(huì)
我們可以通過(guò)調(diào)用Tread類的setPriority(int newPriority)方法來(lái)設(shè)置線程的優(yōu)先級(jí),還可以通過(guò)getPriority()方法來(lái)獲取該線程的優(yōu)先級(jí)。
優(yōu)先級(jí)我們需要輸入范圍在 [1,10] 之間的整數(shù),通常會(huì)有三個(gè)推薦的優(yōu)先級(jí)常量:
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
注意:
現(xiàn)實(shí)生活中,我們?cè)谂抨?duì)的時(shí)候,就想插隊(duì)。所以我們可以通過(guò)join 方法,人為的讓等待的線程提前運(yùn)行,關(guān)系戶就是厲害昂!
禮讓就是這個(gè)正在運(yùn)行的程序,被咱看著不順眼讓他待會(huì)執(zhí)行,先讓優(yōu)先級(jí)高或相同的線程來(lái)執(zhí)行,我們就可以通過(guò)yied方法來(lái)執(zhí)行,如果隊(duì)列里沒(méi)有和它能力一樣或者比它強(qiáng)的,這個(gè)方法沒(méi)啥用!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:*阿炮的Java筆記012號(hào)*-面試令人困擾的多線程?。?!-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://chinadenli.net/article0/dospio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、虛擬主機(jī)、面包屑導(dǎo)航、網(wǎng)站營(yíng)銷、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容