国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java并發(fā)編程學(xué)習(xí)筆記(一)線程的入門(mén)與創(chuàng)建

這篇具有很好參考價(jià)值的文章主要介紹了Java并發(fā)編程學(xué)習(xí)筆記(一)線程的入門(mén)與創(chuàng)建。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、進(jìn)程與線程

認(rèn)識(shí)

  • 程序由指令和數(shù)據(jù)組成,簡(jiǎn)單來(lái)說(shuō),進(jìn)程可以視為程序的一個(gè)實(shí)例
    • 大部分程序可以同時(shí)運(yùn)行多個(gè)實(shí)例進(jìn)程,例如記事本、畫(huà)圖、瀏覽器等
    • 少部分程序只能同時(shí)運(yùn)行一個(gè)實(shí)例進(jìn)程,例如QQ音樂(lè)、網(wǎng)易云音樂(lè)等
  • 一個(gè)進(jìn)程可以分為多個(gè)線程,線程為最小調(diào)度單位,進(jìn)程則是作為資源分配的最小單位
    • 在Windows中進(jìn)程是不活動(dòng)的,只是作為線程的容器

對(duì)比

  • 進(jìn)程之間基本相互獨(dú)立,而線程存在于進(jìn)程內(nèi),是進(jìn)程的一個(gè)子集
  • 進(jìn)程擁有的資源供其內(nèi)部的線程共享
  • 進(jìn)程間通信較為復(fù)雜
    • 同一臺(tái)計(jì)算機(jī)的進(jìn)程通信稱為IPC
    • 不同計(jì)算機(jī)之間的進(jìn)程通信需要通過(guò)網(wǎng)絡(luò),遵守共同的協(xié)議,例如HTTP
  • 線程更輕量,線程上下文切換成本一般上要比進(jìn)程上下文切換低

二、概念總覽

并行與并發(fā)

  • 同一時(shí)刻同時(shí)發(fā)生,即為并行
  • 同一時(shí)段同時(shí)發(fā)生,即為并發(fā)

同步與異步

  • 需要等待結(jié)果返回,才能繼續(xù)運(yùn)行就是同步
  • 不需要等待結(jié)果返回,自顧自地運(yùn)行就是異步

三、創(chuàng)建和運(yùn)行線程

  • 方法一:直接使用Thread
	@Test
    public void test1(){
    	//創(chuàng)建一個(gè)新線程
        Thread thread1=new Thread("t1"){
        	//設(shè)置線程的具體任務(wù)
            public void run(){
                log.info("success");
            }
        };
        //啟動(dòng)線程
        thread1.start();
        log.info("error");
    }
  • 方法二:使用Runnable配合Thread

用這種方式將線程Thread和任務(wù)Runnable分開(kāi),更容易組件化操作文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604941.html

	@Test
    public void test2(){
        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                log.info("success");
            }
        };
        //創(chuàng)建新線程并命名
        Thread thread2=new Thread(runnable,"t2");
        thread2.start();
        log.info("error");
    }
  • 方法三:使用FutureTask配合Thread
	@Test
    public void test4() throws ExecutionException, InterruptedException {
        FutureTask<Integer> futureTask=new FutureTask<>(new Callable<Integer>() {
        	//使用Callable還有一個(gè)好處就是能夠返回值,而Runnable不行
            @Override
            public Integer call() throws Exception {
                log.info("success");
                Thread.sleep(1000);
                return 100;
            }
        });
        Thread thread4=new Thread(futureTask,"t4");
        thread4.start();
		//捕獲到線程執(zhí)行完成并獲取返回值進(jìn)行后續(xù)處理
        Integer result=futureTask.get();
        log.info("error:{}",result);
    }

四、查看進(jìn)程線程的方法

Windows

  • 可以通過(guò)任務(wù)管理器來(lái)看
  • tasklist:查看進(jìn)程
  • taskkill:殺死進(jìn)程

Linux

  • ps -ef 查看所有進(jìn)程
  • ps -ef | grep java :查詢帶Java的進(jìn)程
  • kill 殺死進(jìn)程,kill -9 強(qiáng)制殺死進(jìn)程
  • top 進(jìn)程排名

Java

  • jps:查看所有Java進(jìn)程
  • jconsole:查看某個(gè)Java進(jìn)程中線程的運(yùn)行情況(圖形界面),具體操作步驟如下
    Java并發(fā)編程學(xué)習(xí)筆記(一)線程的入門(mén)與創(chuàng)建,Java并發(fā),java,學(xué)習(xí),筆記

五、線程運(yùn)行的原理

棧與棧幀

  • 每個(gè)棧由多個(gè)棧幀組成,對(duì)應(yīng)著每次方法調(diào)用時(shí)所占用的內(nèi)存
  • 每個(gè)線程只能有一個(gè)活動(dòng)棧幀,對(duì)應(yīng)著當(dāng)前正在執(zhí)行的那個(gè)方法
    Java并發(fā)編程學(xué)習(xí)筆記(一)線程的入門(mén)與創(chuàng)建,Java并發(fā),java,學(xué)習(xí),筆記

上下文切換

  • 由一個(gè)線程切換到另一個(gè)線程即上下文切換,通俗來(lái)說(shuō),也就是要把線程運(yùn)行的環(huán)境換一下,換成線程之前運(yùn)行時(shí)的環(huán)境
  • 專業(yè)一點(diǎn)就是,每次線程切換時(shí),操作系統(tǒng)會(huì)保存當(dāng)前線程的狀態(tài),并恢復(fù)另一個(gè)線程的狀態(tài)
  • 狀態(tài)包括程序計(jì)數(shù)器、棧幀中的信息,如局部變量、操作數(shù)棧、返回地址等

到了這里,關(guān)于Java并發(fā)編程學(xué)習(xí)筆記(一)線程的入門(mén)與創(chuàng)建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JUC并發(fā)編程學(xué)習(xí)筆記(一)認(rèn)知進(jìn)程和線程

    進(jìn)程 一個(gè)程序,如QQ.exe,是程序的集合 一個(gè)進(jìn)程往往可以包含多個(gè)線程,至少包含一個(gè) java默認(rèn)有兩個(gè)線程,GC垃圾回收線程和Main線程 線程:一個(gè)進(jìn)程中的各個(gè)功能 java無(wú)法真正的開(kāi)啟線程,因?yàn)閖ava是運(yùn)行在虛擬機(jī)上的,所以只能通過(guò)C++,通過(guò)native本地方法調(diào)用C++開(kāi)啟線程

    2024年02月06日
    瀏覽(95)
  • Java并發(fā)編程之線程池詳解

    Java并發(fā)編程之線程池詳解

    目錄 ??今日良言:不悲傷 不彷徨 有風(fēng)聽(tīng)風(fēng) 有雨看雨 ??一、簡(jiǎn)介 ??二、相關(guān)代碼 ??1.線程池代碼 ??2.自定義實(shí)現(xiàn)線程池 ??三、ThreadPoolExecutor類 首先來(lái)介紹一下什么是線程池,線程池是一種利用池化技術(shù)思想來(lái)實(shí)現(xiàn)的線程管理技術(shù),主要是為了復(fù)用線程、便利地管理線程

    2024年02月12日
    瀏覽(24)
  • Java并發(fā)編程面試題——線程池

    Java并發(fā)編程面試題——線程池

    參考文章: 《Java 并發(fā)編程的藝術(shù)》 7000 字 + 24 張圖帶你徹底弄懂線程池 (1) 線程池 (ThreadPool) 是一種用于 管理和復(fù)用線程的機(jī)制 ,它是在程序啟動(dòng)時(shí)就預(yù)先創(chuàng)建一定數(shù)量的線程,將這些線程放入一個(gè)池中,并對(duì)它們進(jìn)行有效的管理和復(fù)用,從而在需要執(zhí)行任務(wù)時(shí),可以從

    2024年02月07日
    瀏覽(44)
  • 【Java 并發(fā)編程】Java 線程本地變量 ThreadLocal 詳解

    【Java 并發(fā)編程】Java 線程本地變量 ThreadLocal 詳解

    先一起看一下 ThreadLocal 類的官方解釋: 用大白話翻譯過(guò)來(lái),大體的意思是: ThreadLoal 提供給了 線程局部變量 。同一個(gè) ThreadLocal 所包含的對(duì)象,在不同的 Thread 中有不同的副本。這里有幾點(diǎn)需要注意: 因?yàn)槊總€(gè) Thread 內(nèi)有自己的實(shí)例副本,且 該副本只能由當(dāng)前 Thread 使用 。

    2024年02月04日
    瀏覽(31)
  • 【Java 并發(fā)編程】一文讀懂線程、協(xié)程、守護(hù)線程

    【Java 并發(fā)編程】一文讀懂線程、協(xié)程、守護(hù)線程

    在 Java 線程的生命周期一文中提到了 就緒狀態(tài)的線程在獲得 CPU 時(shí)間片后變?yōu)檫\(yùn)行中狀態(tài) ,否則就會(huì)在 可運(yùn)行狀態(tài) 或者 阻塞狀態(tài) ,那么系統(tǒng)是如何分配線程時(shí)間片以及實(shí)現(xiàn)線程的調(diào)度的呢?下面我們就來(lái)講講線程的調(diào)度策略。 線程調(diào)度是指系統(tǒng)為線程分配 CPU 執(zhí)行時(shí)間片

    2023年04月08日
    瀏覽(24)
  • 【Java并發(fā)編程】變量的線程安全分析

    【Java并發(fā)編程】變量的線程安全分析

    1.成員變量和靜態(tài)變量是否線程安全? 如果他們沒(méi)有共享,則線程安全 如果被共享: 只有讀操作,則線程安全 有寫(xiě)操作,則這段代碼是臨界區(qū),需要考慮線程安全 2.局部變量是否線程安全 局部變量是線程安全的 當(dāng)局部變量引用的對(duì)象則未必 如果給i對(duì)象沒(méi)有逃離方法的作用

    2024年02月08日
    瀏覽(91)
  • Java面試_并發(fā)編程_線程基礎(chǔ)

    Java面試_并發(fā)編程_線程基礎(chǔ)

    進(jìn)程是正在運(yùn)行程序的實(shí)例, 進(jìn)程中包含了線程, 每個(gè)線程執(zhí)行不同的任務(wù) 不同的進(jìn)程使用不同的內(nèi)存空間, 在當(dāng)前進(jìn)程下的所有線程可以共享內(nèi)存空間 線程更輕量, 線程上下文切換成本一般上要比進(jìn)程上下文切換低(上下文切換指的是從一個(gè)線程切換到另一個(gè)線程) 并發(fā)是單個(gè)

    2024年02月07日
    瀏覽(30)
  • java并發(fā)編程:多線程基礎(chǔ)知識(shí)介紹

    最初的計(jì)算機(jī)只能接受一些特定的指令,用戶每輸入一個(gè)指令,計(jì)算機(jī)就做出一個(gè)操作。當(dāng)用戶在思考或者輸入時(shí),計(jì)算機(jī)就在等待。這樣效率非常低下,在很多時(shí)候,計(jì)算機(jī)都處在等待狀態(tài)。 后來(lái)有了 批處理操作系統(tǒng) ,把一系列需要操作的指令寫(xiě)下來(lái),形成一個(gè)清單,一次

    2024年02月07日
    瀏覽(21)
  • 【Java并發(fā)編程】線程中斷機(jī)制(輔以常見(jiàn)案例)

    本文由淺入深介紹了中斷機(jī)制、中斷的常見(jiàn)案例和使用場(chǎng)景。 因?yàn)橐恍┰蛐枰∠菊趫?zhí)行的線程。我們舉幾個(gè)栗子: 假設(shè)踢足球點(diǎn)球時(shí),A隊(duì)前4輪中了4個(gè)球,B隊(duì)前4輪只中了2個(gè)球,此時(shí)勝負(fù)已分,第5輪這個(gè)點(diǎn)球就不用踢了,此時(shí)需要停止A隊(duì)的線程和B隊(duì)的線程(共

    2024年02月13日
    瀏覽(30)
  • Java并發(fā)(三)----創(chuàng)建線程的三種方式及查看進(jìn)程線程

    Java并發(fā)(三)----創(chuàng)建線程的三種方式及查看進(jìn)程線程

    例如: 輸出 注意:這里通過(guò) @Slf4j 注解打印的日志 把【線程】和【任務(wù)】(要執(zhí)行的代碼)分開(kāi) Thread 代表線程 Runnable 可運(yùn)行的任務(wù)(線程要執(zhí)行的代碼) 例如: 輸出 Java 8 以后可以使用 lambda 精簡(jiǎn)代碼 小結(jié) 方法1 是把線程和任務(wù)合并在了一起,方法2 是把線程和任務(wù)分開(kāi)

    2023年04月24日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包