鈥嬪氨鍍忕倰鑿滅敤閾侀攨銆佷笉绮橀攨" />
首页 > 趣闻 > 正文内容

Java多线程创建3种核心方:Thread、Runnable、Callable实例详解

趣闻2025-05-27 20:46:34

涓€銆佷负浠€涔圝ava瑕佹湁涓夌鍒涘缓绾跨▼鐨勬柟寮忥紵馃

浣犳槸涓嶆槸鍒氬澶氱嚎绋嬫椂锛岃Thread銆丷unnable銆丆allable缁曞緱澶存檿锛熸槑鏄庨兘鏄浠g爜"鍚屾椂骞插浠朵簨"锛屼负鍟ヨ鎼炶繖涔堝鑺辨牱锛熶粖澶╂垜浠氨鐢ㄤ汉璇濇媶瑙h繖涓夌鏂规硶鐨勫尯鍒€斺€旇鐧戒簡锛屸€?strong>鈥嬪氨鍍忕倰鑿滅敤閾侀攨銆佷笉绮橀攨銆佺┖姘旂偢閿咃紝宸ュ叿涓嶅悓锛岄€傜敤鍦烘櫙涔熶笉鍚屸€?/strong>鈥嬨€?/p>

涓句釜鐪熷疄鍦烘櫙锛氬亣璁句綘瑕佸湪鍚庡彴涓嬭浇100寮犲浘鐗囷紙鏂版墜濡備綍蹇€熸定绮夛紵澶氬彂浼樿川鍐呭鍟婏紒浣嗗彂鍥炬€诲緱鍏堜笅杞藉鍚э紵锛夛紝鐢ㄥ崟绾跨▼涓嬭浇瑕佺瓑100娆★紝鑰屽绾跨▼鑳借10涓笅杞戒换鍔″悓鏃惰窇銆備絾鍏蜂綋鎬庝箞瀹炵幇锛熷線涓嬬湅馃憞


浜屻€佹渶鍘熷鐨凾hread绫伙細绠€鍗曠矖鏆翠絾瀹规槗缈昏溅 馃殤

1. 鎬庝箞鐢紵

鐩存帴缁ф壙Thread绫伙紝灏卞儚杩欐牱锛?/p>

java澶嶅埗
class 涓嬭浇绾跨▼ extends Thread {
    @Override
    public void run() {
        System.out.println("姝e湪涓嬭浇锛?+getName());
    }
}
//鍚姩绾跨▼
new 涓嬭浇绾跨▼().start();

鈥?strong>鈥嬩紭鐐光€?/strong>鈥嬶細涓夎浠g爜灏辫兘璺戣捣鏉ワ紝鐗瑰埆閫傚悎涓存椂娴嬭瘯銆?/p>

2. 缈昏溅鐜板満棰勮 馃毃

浣嗗疄闄呭紑鍙戜腑浼氶亣鍒颁袱涓潙锛?/p>

  • 鈥?strong>鈥嬪崟缁ф壙闄愬埗鈥?/strong>鈥嬶細Java鍙兘鍗曠户鎵匡紝濡傛灉杩欎釜绫诲凡缁忕户鎵夸簡鍏朵粬绫伙紙姣斿App鐣岄潰绫伙級锛屽氨涓嶈兘鍐嶇敤Thread浜?/li>
  • 鈥?strong>鈥嬭祫婧愬叡浜洶闅锯€?/strong>鈥嬶細姣斿涓や釜绾跨▼鍚屾椂鎿嶄綔鍚屼竴涓鏁板櫒锛岀敤Thread瀹炵幇鐨勭被浼氬悇鑷垱寤虹嫭绔嬪彉閲忥紙涓嶄俊璇曡瘯缃戦〉4閲岀殑鍗栫エ妗堜緥锛?/li>

杩欐椂鍊欏氨璇unnable鍑哄満浜嗭紒


涓夈€丷unnable鎺ュ彛锛氭墦宸ヤ汉蹇呭鐨勭伒娲诲Э鍔?馃攧

1. 姝g‘鎵撳紑鏂瑰紡

java澶嶅埗
class 涓嬭浇浠诲姟 implements Runnable {
    private int 鍓╀綑鏁伴噺=100; //鎵€鏈夌嚎绋嬪叡浜繖涓暟锛?/span>
    @Override
    public void run() {
        while(鍓╀綑鏁伴噺>0){
            System.out.println(Thread.currentThread().getName()+"鎷胯蛋1寮?);
            鍓╀綑鏁伴噺--;
        }
    }
}
//鍚姩10涓笅杞藉伐
Runnable 浠诲姟 = new 涓嬭浇浠诲姟();
for(int i=0;i<10;i++) {
    new Thread(浠诲姟,"绾跨▼"+i).start();
}

鈥?strong>鈥嬫牳蹇冧紭鍔库€?/strong>鈥嬬湅杩欓噷馃憠锛?/p>

  • 绐佺牬鍗曠户鎵块檺鍒讹紝鎯冲疄鐜板嚑涓帴鍙i殢渚夸綘
  • 澶氫釜绾跨▼鎿嶄綔鍚屼竴浠芥暟鎹紙姣斿缃戦〉4閲屽叡浜殑绁ㄦ暟锛?/li>
  • 閰嶅悎绾跨▼姹犳洿棣欙紙鍚庨潰浼氳锛?/li>

2. 鐏甸瓊鎷烽棶锛歊unnable鍜孴hread浠€涔堝叧绯伙紵

鍏跺疄Thread绫昏嚜宸卞氨鏄釜Runnable瀹炵幇绫伙紒瀹冪殑run鏂规硶闀胯繖鏍凤細

java澶嶅埗
public void run() {
    if (target != null) {  //杩欎釜target灏辨槸鍜变滑浼犵殑Runnable瀵硅薄
        target.run();
    }
}

鎵€浠ョ敤Runnable鐩稿綋浜庘€?strong>鈥嬫妸浠诲姟鍜岃窇浠诲姟鐨勫伐鍏峰垎寮€鈥?/strong>鈥嬶紝灏卞儚浣犳妸鑿滆氨锛圧unnable锛変氦缁欎笉鍚屽帹甯堬紙Thread锛夋潵鍋氥€?/p>


鍥涖€丆allable鎺ュ彛锛氳兘甯?澶栧崠"鍥炰紶缁撴灉鐨勫崌绾х増 馃幆

1. 涓轰粈涔堥渶瑕佸畠锛?/h4>

鍋囪浣犺缁熻10涓枃浠堕噷鍏辨湁澶氬皯琛屼唬鐮侊紝Runnable绾跨▼骞插畬娲诲氨娑堝け浜嗭紝浣咰allable绾跨▼鑳芥妸缁撴灉瑁呰繘"澶栧崠琚?锛團utureTask锛夊甫鍥炴潵锛?/p>

java澶嶅埗
Callable 缁熻浠诲姟 = () -> {
    int 琛屾暟 = 璇诲彇鏂囦欢骞剁粺璁?);
    return 琛屾暟; //Runnable鍋氫笉鍒拌繖涓紒
};
FutureTask 澶栧崠琚?= new FutureTask<>(缁熻浠诲姟);
new Thread(澶栧崠琚?.start();

//绛夋墍鏈夌嚎绋嬮€佸畬"澶栧崠"
int 鎬婚噺 = 澶栧崠琚?get(); 

鈥?strong>鈥嬩笁澶у崌绾х偣鈥?/strong>鈥嬶細

  • 鑳借繑鍥炲叿浣撶粨鏋滐紙Integer/String绛夛級
  • 鏀寔寮傚父鎶涘嚭锛堟瘮濡傛枃浠惰鍙栧け璐ユ椂锛?/li>
  • 閫傚悎澶嶆潅浠诲姟缂栨帓锛堢綉椤?2灞曠ず浜嗙粨鍚堢嚎绋嬫睜鐨勭敤娉曪級

2. 瓒呭疄鐢ㄥ姣旇〃

ThreadRunnableCallable
杩斿洖鍊?/td>鉂?/td>鉂?/td>鉁旓笍
寮傚父澶勭悊try/catchtry/catch鐩存帴鎶涘嚭
閫傜敤鍦烘櫙绠€鍗曠嫭绔嬩换鍔?/td>璧勬簮鍏变韩浠诲姟闇€瑕佺粨鏋滅殑浠诲姟
浠g爜鑰﹀悎搴?/td>楂?/td>浣?/td>浣?/td>
绾跨▼姹犲吋瀹规€?/td>鉂?/td>鉁旓笍鉁旓笍

浜斻€佸皬缂栬俯鍧戠粡楠岃皥 馃挕

  1. 鈥?strong>鈥嬫柊鎵嬪缓璁矾绾垮浘鈥?/strong>鈥嬶細

    • 鍏堢敤Thread鐞嗚В鍩虹姒傚康
    • 绗簩澶╁氨鍒囧埌Runnable锛岄伩鍏嶅吇鎴愬潖涔犳儻
    • 绛夌啛鎮夌嚎绋嬪畨鍏ㄥ悗锛屽啀鐜〤allable+Future
  2. 鈥?strong>鈥嬪疄闄呭紑鍙戞綔瑙勫垯鈥?/strong>鈥嬶細

    • 鐜板湪涓绘祦妗嗘灦锛堟瘮濡係pring锛夊熀鏈兘鐢ㄧ嚎绋嬫睜+Runnable/Callable锛堝弬鑰冪綉椤?鐨凟xecutor绀轰緥锛?/li>
    • 鐩存帴缁ф壙Thread鐨勫啓娉曪紝鍦ㄧ湡瀹為」鐩噷鍑犱箮缁濊抗浜?/li>
  3. 鈥?strong>鈥嬫€ц兘鍐风煡璇嗏€?/strong>鈥嬶細

    • 鍒涘缓绾跨▼鏈韩闇€瑕佺害1MB鍐呭瓨锛堟潵鑷狫VM榛樿鏍堝ぇ灏忥級
    • 杩欏氨鏄负浠€涔堢綉椤?寮鸿皟瑕佺敤绾跨▼姹犫€斺€旈绻乶ew Thread浼氬鑷村唴瀛樼垎鐐革紒

鍏€佸埌搴曢€夊摢绉嶏紵鐪嬪満鏅笅鑿滅 馃嵆

  • 鈥?strong>鈥嬩复鏃舵祴璇曗€?/strong>鈥嬶細Thread鍐欒捣鏉ュ揩
  • 鈥?strong>鈥嬬敤鎴蜂笅鍗曗€?/strong>鈥嬶細鐢≧unnable淇濊瘉搴撳瓨鎵e噺鍑嗙‘
  • 鈥?strong>鈥嬫暟鎹姤琛ㄢ€?/strong>鈥嬶細Callable璁╂瘡涓嚎绋嬭繑鍥炵粺璁$粨鏋?/li>
  • 鈥?strong>鈥嬮珮骞跺彂鍦烘櫙鈥?/strong>鈥嬶細蹇呴』涓婄嚎绋嬫睜锛堢綉椤?1鐨勭嚎绋嬫睜瀵规瘮璁插緱寰堢粏锛?/li>

璁颁綇锛屸€?strong>鈥嬫病鏈夋渶濂界殑鏂规硶锛屽彧鏈夋渶鍚堥€傜殑鍦烘櫙鈥?/strong>鈥嬨€傚氨鍍忎綘涓嶄細鐢ㄧ┖姘旂偢閿呯叜姹わ紝瀵瑰惂锛?/p>

搜索