摘要:線程是進程的一個執(zhí)行單元,是進程內(nèi)科調(diào)度實體,比進程更小的獨立運行的基本單位。資源擁有同一進程內(nèi)的線程共享本進程的資源,但是進程之間的資源是獨立的。所以涉及到頻繁的切換時,使用線程要好于進程。線程是處理器調(diào)度的基本單位,但是進程不是。
什么是進程,什么是線程?
進程:進程是程序的一次執(zhí)行,是系統(tǒng)進行資源分配和調(diào)度的獨立單位。每一個進程都有它自己的內(nèi)存空間和系統(tǒng)資源。
線程:是進程的一個執(zhí)行單元,是進程內(nèi)科調(diào)度實體,比進程更小的獨立運行的基本單位。一個進程在其執(zhí)行的過程中可以產(chǎn)生多個線程,與進程不同的是同類的多個線程共享進程的堆和方法區(qū)資源,但每個線程有自己的程序計數(shù)器、虛擬機棧和本地方法棧,所以系統(tǒng)在產(chǎn)生一個線程,或是在各個線程之間作切換工作時,負擔要比進程小得多,因此線程也被稱為輕量級進程。
一個程序至少一個進程,一個進程至少一個線程。
地址空間:同一進程的線程共享本進程的地址空間,而進程之間則是獨立的地址空間。
資源擁有:同一進程內(nèi)的線程共享本進程的資源,但是進程之間的資源是獨立的。
一個進程崩潰后,在保護模式下不會對其他進程產(chǎn)生影響,但是一個線程崩潰整個進程都死掉。所以多進程要比多線程健壯。
進程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好于進程。同樣如果要求同時進行并且又要共享某些變量的并發(fā)操作,只能用線程不能用進程。
執(zhí)行過程:每個獨立的進程程有一個程序運行的入口、順序執(zhí)行序列和程序入口。但是線程不能獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制。
線程是處理器調(diào)度的基本單位,但是進程不是。
進程是并行的,線程是并發(fā)的
并行與并發(fā)并行:
并行性是指同一時刻內(nèi)發(fā)生兩個或多個事件,是在不同實體上的多個事件
并發(fā):
并發(fā)性是指同一時間間隔內(nèi)發(fā)生兩個或多個事件,是在同一實體上的多個事件
Java實現(xiàn)多線程
繼承Thread,重寫run方法
public class MyThread extends Thread { @Override public void run() { for (int x = 0; x < 200; x++) { System.out.println(x); } } }
public class MyThreadDemo { public static void main(String[] args) { // 創(chuàng)建兩個線程對象 MyThread my1 = new MyThread(); MyThread my2 = new MyThread(); my1.start(); my2.start(); } }
實現(xiàn)Runnable接口,重寫run方法
public class MyRunnable implements Runnable { @Override public void run() { for (int x = 0; x < 100; x++) { System.out.println(x); } } }
public class MyRunnableDemo { public static void main(String[] args) { // 創(chuàng)建MyRunnable類的對象 MyRunnable my = new MyRunnable(); Thread t1 = new Thread(my); Thread t2 = new Thread(my); t1.start(); t2.start(); } }
一般使用實現(xiàn)Runnable接口
jvm虛擬機的啟動是單線程的還是多線程的?是多線程的。不僅僅是啟動main線程,還至少會啟動垃圾回收線程的
并發(fā)基礎筆試題這是github上一位大佬整理的,個人覺得很棒
并發(fā)基礎筆試題
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/75735.html
摘要:協(xié)作方式在高并發(fā)場景中,必須要讓服務器同時維護大量請求連接,可能是一個服務進程創(chuàng)建另一個進程,也可能是一個服務線程去創(chuàng)建另一個線程,但連接結束后進程或線程就銷毀了,這是一個巨大的浪費一個自然的想法就是通過創(chuàng)建一個進程線程池從而達到資源復用, showImg(https://segmentfault.com/img/bVbtgn1?w=313&h=208); 協(xié)作方式 在高并發(fā)場景中,必...
摘要:當某種網(wǎng)絡事件發(fā)生時,會回調(diào)用戶設置的指定回調(diào)函數(shù)。承擔了底層網(wǎng)絡事件的監(jiān)聽及各種底層事件處理,當收到請求時,會觸發(fā)事件提醒,然后將控制權轉交預先注冊的事件回調(diào)函數(shù),來進行后續(xù)的處理。請求到來時創(chuàng)建,請求結束后銷毀。 運行流程圖 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...
摘要:最近聽很多面試的小伙伴說,網(wǎng)上往往是一篇一篇的多線程的文章,除了書籍沒有什么學習多線程的一系列文章。將此線程標記為線程或用戶線程。 最近聽很多面試的小伙伴說,網(wǎng)上往往是一篇一篇的Java多線程的文章,除了書籍沒有什么學習多線程的一系列文章。但是僅僅憑借一兩篇文章很難對多線程有系統(tǒng)的學習,而且面試的時候多線程這方面的知識往往也是考察的重點,所以考慮之下決定寫一系列關于Java多線程的文章...
閱讀 1756·2021-11-18 10:02
閱讀 2271·2021-11-15 11:38
閱讀 2730·2019-08-30 15:52
閱讀 2266·2019-08-29 14:04
閱讀 3289·2019-08-29 12:29
閱讀 2136·2019-08-26 11:44
閱讀 1060·2019-08-26 10:28
閱讀 904·2019-08-23 18:37