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

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

這篇具有很好參考價(jià)值的文章主要介紹了Java并發(fā)(三)----創(chuàng)建線程的三種方式及查看進(jìn)程線程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、直接使用 Thread

// 創(chuàng)建線程對(duì)象
Thread t = new Thread() {
 ? ?public void run() {
 ? ? ? ?// 要執(zhí)行的任務(wù)
 ?  }
};
// 啟動(dòng)線程
t.start();

例如:

// 構(gòu)造方法的參數(shù)是給線程指定名字,推薦
Thread t1 = new Thread("t1") {
 ? ?@Override
 ? ?// run 方法內(nèi)實(shí)現(xiàn)了要執(zhí)行的任務(wù)
 ? ?public void run() {
 ? ? ? ?log.debug("hello");
 ?  }
};
t1.start();

輸出

19:19:00 [t1] c.ThreadStarter - hello

注意:這里通過(guò)@Slf4j注解打印的日志

二、使用 Runnable

把【線程】和【任務(wù)】(要執(zhí)行的代碼)分開

  • Thread 代表線程

  • Runnable 可運(yùn)行的任務(wù)(線程要執(zhí)行的代碼)

Runnable runnable = new Runnable() {
 ? ?public void run(){
 ? ? ? ?// 要執(zhí)行的任務(wù)
 ?  }
};
// 創(chuàng)建線程對(duì)象
Thread t = new Thread( runnable );
// 啟動(dòng)線程
t.start(); 

例如:

// 創(chuàng)建任務(wù)對(duì)象
Runnable task2 = new Runnable() {
 ? ?@Override
 ? ?public void run() {
 ? ? ? ?log.debug("hello");
 ?  }
};
?
// 參數(shù)1 是任務(wù)對(duì)象; 參數(shù)2 是線程名字,推薦
Thread t2 = new Thread(task2, "t2");
t2.start();

輸出

19:19:00 [t2] c.ThreadStarter - hello

Java 8 以后可以使用 lambda 精簡(jiǎn)代碼

// 創(chuàng)建任務(wù)對(duì)象
Runnable task2 = () -> log.debug("hello");
?
// 參數(shù)1 是任務(wù)對(duì)象; 參數(shù)2 是線程名字,推薦
Thread t2 = new Thread(task2, "t2");
t2.start();

小結(jié)

  • 方法1 是把線程和任務(wù)合并在了一起,方法2 是把線程和任務(wù)分開了

  • 推薦使用用 Runnable,因?yàn)?更容易與線程池等高級(jí) API 配合

  • 用 Runnable 讓任務(wù)類脫離了 Thread 繼承體系,更靈活

三、FutureTask

FutureTask (未來(lái)任務(wù))能夠接收 Callable 類型的參數(shù),用來(lái)處理有返回結(jié)果的情況

// 創(chuàng)建任務(wù)對(duì)象
FutureTask<Integer> task3 = new FutureTask<>(() -> {
 ? ?log.debug("hello");
 ? ?Thread.sleep(2000);
 ? ?return 100;
});
?
// 參數(shù)1 是任務(wù)對(duì)象; 參數(shù)2 是線程名字,推薦
new Thread(task3, "t3").start();
?
// 運(yùn)行到這里主線程阻塞,會(huì)同步等待 task 執(zhí)行完畢的結(jié)果
Integer result = task3.get();
log.debug("結(jié)果是:{}", result);

輸出

19:22:27 [t3] c.ThreadStarter - hello
19:22:29 [main] c.ThreadStarter - 結(jié)果是:100

可以看到兩秒后主線程返回結(jié)果

四、觀察多個(gè)線程同時(shí)運(yùn)行

主要是理解

  • 交替執(zhí)行

  • 誰(shuí)先誰(shuí)后,線程的執(zhí)行不由我們控制

代碼

 ? ?public static void main(String[] args) {
 ? ? ? ?new Thread(() -> {
 ? ? ? ? ? ?while(true) {
 ? ? ? ? ? ? ? ?log.debug("running");
 ? ? ? ? ?  }
 ? ? ?  },"t1").start();
 ? ? ? ?new Thread(() -> {
 ? ? ? ? ? ?while(true) {
 ? ? ? ? ? ? ? ?log.debug("running");
 ? ? ? ? ?  }
 ? ? ?  },"t2").start();
 ?  }

結(jié)果

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

可以看到,線程是交替運(yùn)行的。但是誰(shuí)先誰(shuí)后不是我們控制的。但是如果是單核CPU的話運(yùn)行這段程序的話,只會(huì)有一個(gè)線程開始運(yùn)行。

五、查看進(jìn)程線程

5.1 windows

  • 任務(wù)管理器可以查看進(jìn)程和線程數(shù),也可以用來(lái)殺死進(jìn)程

  • 控制臺(tái)tasklist 查看進(jìn)程

  • 控制臺(tái)taskkill /F /PID pid編號(hào) 殺死進(jìn)程

5.2 linux

  • ps -fe 查看所有進(jìn)程

  • ps -fe | grep 關(guān)鍵詞 查看所有進(jìn)程

  • ps -fT -p <PID> 查看某個(gè)進(jìn)程(PID)的所有線程

  • kill 殺死進(jìn)程

  • top 按大寫 H 切換是否顯示線程

  • top -H -p <PID> 查看某個(gè)進(jìn)程(PID)的所有線程,可持續(xù)查看線程的狀態(tài)

5.3 Java

  • jps 命令查看所有 Java 進(jìn)程

  • jstack <PID> 查看某個(gè) Java 進(jìn)程(PID)的所有線程狀態(tài) ,只能查看某一刻某個(gè)進(jìn)程所有線程較詳細(xì)的狀態(tài)

  • jconsole 來(lái)查看某個(gè) Java 進(jìn)程中線程的運(yùn)行情況(圖形界面)

  • 如果是從命令行啟動(dòng),使 JDK 在 PATH 上,運(yùn)行 jconsole 即可;如果從 GUI shell 啟動(dòng),找到 JDK 安裝路徑,打開 bin 文件夾,雙擊?jconsole

??jconsole 遠(yuǎn)程監(jiān)控配置

  • 需要以如下方式運(yùn)行你的 java 類

java -Djava.rmi.server.hostname=`ip地址` -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=`連接端口` -Dcom.sun.management.jmxremote.ssl=是否安全連接 -Dcom.sun.management.jmxremote.authenticate=是否認(rèn)證 java類
  • 修改 /etc/hosts 文件將 127.0.0.1 映射至主機(jī)名

如果要認(rèn)證訪問(wèn),還需要做如下步驟

  • 復(fù)制 jmxremote.password 文件

  • 修改 jmxremote.password 和 jmxremote.access 文件的權(quán)限為 600 即文件所有者可讀寫

  • 連接時(shí)填入 controlRole(用戶名),R&D(密碼)

這種方式了解一下即可。對(duì)于生產(chǎn)環(huán)境一般沒(méi)有權(quán)限訪問(wèn)的。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424110.html

?

到了這里,關(guān)于Java并發(fā)(三)----創(chuàng)建線程的三種方式及查看進(jìn)程線程的文章就介紹完了。如果您還想了解更多內(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)文章

  • C++創(chuàng)建線程的三種方式

    早期的C++并不支持多線程的創(chuàng)建,如果要?jiǎng)?chuàng)建多線程,依賴的是系統(tǒng)提供的一些方法(例如linux的 pthread). 從C++11以后開始,提供了std::thread線程庫(kù),因此我們可以創(chuàng)建std::thread類對(duì)象的方式來(lái)創(chuàng)建線程。創(chuàng)建的方式主要有三種: 通過(guò)函數(shù)指針 通過(guò)函數(shù)對(duì)象 通過(guò)lambda函數(shù) 使用

    2024年02月16日
    瀏覽(21)
  • Java 創(chuàng)建多線程的三種方法

    Java 創(chuàng)建多線程的三種方法

    在Java中創(chuàng)建多線程,往往都要通過(guò)Thread類來(lái)實(shí)現(xiàn),今天學(xué)習(xí)下Java中創(chuàng)建多線程的三種方法[1]。 通過(guò)繼承 Thread類 實(shí)現(xiàn)多線程。 主要方法: 1.void run(), 線程開啟后,方法將被調(diào)用執(zhí)行 2.void start(), 使此線程開始執(zhí)行, Java虛擬機(jī)會(huì)調(diào)用run()方法 實(shí)現(xiàn)步驟: 1.定義類,繼承 Thread類

    2024年02月05日
    瀏覽(21)
  • Java 實(shí)現(xiàn)多線程的三種方式

    1、三種方法的介紹和比較 1、1三種方式得介紹 1、繼承Thread類 2、實(shí)現(xiàn)Runnable接口 3、實(shí)現(xiàn)Callable接口 1、2三種方法的介紹和比較 1、2、1、實(shí)現(xiàn)Runnable接口相比繼承Thread類有如下優(yōu)勢(shì) 1、增強(qiáng)程序的健壯性,將業(yè)務(wù)邏輯與線程調(diào)度分離 2、線程池只能放入實(shí)現(xiàn)Runable或Callable類線程

    2024年02月02日
    瀏覽(22)
  • Java 多線程實(shí)現(xiàn)的三種方式

    Java 多線程實(shí)現(xiàn)方式主要有三種:繼承 Thread 類、實(shí)現(xiàn) Runnable 接口、使用 ExecutorService、Callable、Future 實(shí)現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒(méi)有返回值,只有最后一種是帶返回值的。 1、繼承 Thread 類實(shí)現(xiàn)多線程 繼承 Thread 類的方法盡管被我列為一種多線程

    2023年04月27日
    瀏覽(23)
  • Java創(chuàng)建文件的三種方式

    Java創(chuàng)建文件的三種方式

    內(nèi)容來(lái)自于韓順平學(xué)Java 在學(xué)習(xí)其視頻下跟著編寫 文件創(chuàng)建成功

    2024年04月11日
    瀏覽(22)
  • Java創(chuàng)建數(shù)組的三種方式

    這種一般用的比較多。 數(shù)組類型 [ ]? 數(shù)組名稱? =? new 數(shù)組類型 [ 數(shù)組長(zhǎng)度 ]?

    2024年02月03日
    瀏覽(26)
  • 為Java應(yīng)用創(chuàng)建Docker鏡像的三種方式

    為Java應(yīng)用創(chuàng)建Docker鏡像的三種方式

    在 Dockerfiles 出現(xiàn)的很久之前,Java 開發(fā)者大多使用單體應(yīng)用方式部署(WARs, JARs, EARs, 等等)?,F(xiàn)在如你所知,最好的做法是為每個(gè)小業(yè)務(wù)單獨(dú)部署的微服務(wù)方式。你構(gòu)建的不是一個(gè)巨大的單體應(yīng)用程序,而是使多個(gè)可以獨(dú)立運(yùn)行的小服務(wù)。 這正是 Docker 的用武之地。如果你想

    2023年04月26日
    瀏覽(20)
  • Golang殺死子進(jìn)程的三種方式

    目錄 前言 正文 一、cmd.Process.Kill() 二、syscall.Kill 三、cmd.Process.Signal 結(jié)論 熟悉Golang語(yǔ)言的小伙伴一定都知道,殺死子進(jìn)程有三種方式,今天就來(lái)簡(jiǎn)單介紹一下。 Golang中有三種方式可以殺死子進(jìn)程,分別是cmd.Process.Kill(),?syscall.Kill,和?cmd.Process.Signal。它們都是通過(guò)向進(jìn)程發(fā)送

    2024年01月21日
    瀏覽(21)
  • docker 查看日志的三種方式

    docker logs命令是 Docker 的日志管理工具,它能夠在終端中打印出容器的標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出。

    2024年04月25日
    瀏覽(29)
  • 【Java基礎(chǔ)教程】(四十二)多線程篇 · 上:多進(jìn)程與多線程、并發(fā)與并行的關(guān)系,多線程的實(shí)現(xiàn)方式、線程流轉(zhuǎn)狀態(tài)、常用操作方法解析~

    【Java基礎(chǔ)教程】(四十二)多線程篇 · 上:多進(jìn)程與多線程、并發(fā)與并行的關(guān)系,多線程的實(shí)現(xiàn)方式、線程流轉(zhuǎn)狀態(tài)、常用操作方法解析~

    理解進(jìn)程與線程的區(qū)別; 掌握J(rèn)ava 中多線程的兩種實(shí)現(xiàn)方式及區(qū)別; 掌握線程的基本操作方法; 進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過(guò)程,它經(jīng)歷了從代碼加載、執(zhí)行到執(zhí)行完畢的一個(gè)完整過(guò)程,這個(gè)過(guò)程也是進(jìn)程本身從產(chǎn)生、發(fā)展到最終消亡的過(guò)程 。多進(jìn)程操作系統(tǒng)能同時(shí)運(yùn)行多

    2024年02月16日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包