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