1. 主页 > 好文章

Java线程常用方法详解:从入门到实战应用

浣犳槸涓嶆槸鍒氬Java澶氱嚎绋嬶紝鐪嬪埌閭d簺绾跨▼鏂规硶灏卞ご澶э紵鍒厡锛佷粖澶╁挶浠氨鐢?璇翠汉璇?鐨勬柟寮忥紝鎶娾€?strong>鈥媠tart()銆乻leep()銆亀ait()鈥?/strong>鈥嬭繖浜涚湅鐫€灏卞ご绉冪殑鏂规硶鎺板紑浜嗘弶纰庝簡璁层€備繚璇佷綘鐪嬪畬灏辫兘涓婃墜鐢紝鍐嶄篃涓嶆€曢潰璇曞畼闂?绾跨▼鍜岃繘绋嬫湁鍟ュ尯鍒?杩欑閫佸懡棰橈紒


涓€銆佸厛鎼炴槑鐧斤細鍟ユ槸绾跨▼鏂规硶锛?/h3>

锛堝亣瑁呰繖閲屾湁涓皬鏍囬锛屼絾涓嶇敤鏍囩锛?/p>

涓句釜鏍楀瓙馃尠锛氫綘寮€浜嗕竴瀹跺ザ鑼跺簵锛堣繘绋嬶級锛屽簵閲?涓憳宸ワ紙绾跨▼锛夊悓鏃跺仛濂惰尪銆傗€?strong>鈥嬬嚎绋嬫柟娉曞氨鏄杩欎簺鍛樺伐鍗忚皟宸ヤ綔鐨勫伐鍏封€?/strong>鈥嬨€傛瘮濡傝灏忕帇鍏堟瓏浼氬効锛坰leep锛夛紝绛夌弽鐝犵叜濂戒簡鍐嶅彨浠栵紙notify锛夈€?/p>

鈥?strong>鈥嬮噸鐐规潵浜嗏€?/strong>鈥嬶細Java閲屾搷浣滅嚎绋嬬殑鏍稿績鏂规硶閮借棌鍦═hread绫诲拰Object绫婚噷銆傚挶浠厛鐪嬪紶瀵规瘮琛紝5绉掔湅鎳傛渶甯哥敤鐨?涓柟娉曪細

鏂规硶鍚?/th>褰掑睘绫?/th>浣滅敤浣跨敤鍦烘櫙
start()Thread鍚姩鏂扮嚎绋?/td>澶氫换鍔″苟琛屽鐞?/td>
sleep()Thread璁╁綋鍓嶇嚎绋嬫殏鍋?/td>妯℃嫙鑰楁椂鎿嶄綔
wait()Object閲婃斁閿佸苟绛夊緟绾跨▼闂撮€氫俊
notify()Object鍞ら啋绛夊緟鐨勭嚎绋?/td>鍗忎綔瀹屾垚浠诲姟
join()Thread绛夎繖涓嚎绋嬫浜嗗啀缁х画淇濊瘉浠诲姟鎵ц椤哄簭
yield()Thread璁╁嚭CPU璧勬簮閬垮厤绾跨▼闀挎椂闂村崰鐢–PU

浜屻€佹柊鎵嬪繀韪╃殑鍧戯細start()鍜宺un()鏈夊暐鍖哄埆锛?/h3>

锛堣繖閲屽亣瑁呮槸绗簩涓皬鏍囬锛?/p>

寰堝灏忕櫧浼氳繖涔堝啓锛?/p>

java澶嶅埗
Thread t = new Thread(() -> System.out.println("hello"));
t.run();  // 閿欒锛佽繖杩樻槸鍦ㄤ富绾跨▼鎵ц
t.start(); // 姝g‘锛佽繖鎵嶅惎鍔ㄦ柊绾跨▼

鈥?strong>鈥嬪垝閲嶇偣鈥?/strong>鈥嬶細鐩存帴璋冪敤run()灏卞儚璁╁簵闀夸翰鑷仛濂惰尪锛屾牴鏈病鍚姩鏂板憳宸ワ紒start()鎵嶆槸鐪熸璁╂柊绾跨▼骞叉椿鐨勬纭Э鍔裤€?/p>


涓夈€乻leep()鍜寃ait()杩欏鍐ゅ

缁忓父鏈変汉闂垜锛?杩欎咯涓嶉兘鏄绾跨▼绛夌潃鍚楋紵鏈夊暐涓嶄竴鏍凤紵"

涓句釜鐜板疄渚嬪瓙锛氫綘鍘婚摱琛屽姙涓氬姟锛堥攣灏辨槸鏌滃彴锛?/p>

  • 鈥?strong>鈥媠leep(2000)鈥?/strong>鈥?灏卞儚鏌滃憳璇?绛夋垜涓ゅ垎閽?锛屼絾鏌滃彴杩樻槸琚粬鍗犵潃
  • 鈥?strong>鈥媤ait()鈥?/strong>鈥?灏辨槸鏌滃憳璇?鎴戣繖杈归渶瑕佺瓑鏉愭枡"锛屼富鍔ㄧ寮€鏌滃彴璁╁埆浜虹敤

鈥?strong>鈥嬬‖鏍稿姣斺€?/strong>鈥嬶細

  1. sleep()瑕佹寚瀹氱瓑寰呮椂闂达紝wait()鍙互涓嶈鏃堕棿
  2. sleep()涓嶉噴鏀鹃攣锛寃ait()浼氶噴鏀鹃攣
  3. sleep()鍦═hread绫婚噷锛寃ait()鍦∣bject绫婚噷

鍥涖€佸疄鎴樻渚嬶細濂惰尪搴楀彨鍙风郴缁?/h3>

鍋囪鍜变滑瑕佸啓涓ザ鑼跺簵鍙彿绋嬪簭锛?涓獥鍙e悓鏃跺伐浣滐細

java澶嶅埗
public class MilkTeaShop {
    public static void main(String[] args) throws InterruptedException {
        Thread window1 = new Thread(() -> {
            System.out.println("1鍙风獥鍙e紑濮嬪仛濂惰尪");
            try {
                Thread.sleep(3000); // 妯℃嫙鍋氬ザ鑼惰3绉?/span>
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("1鍙风獥鍙eザ鑼跺仛濂戒簡");
        });
        
        window1.start();
        window1.join(); // 绛?鍙风獥鍙e仛瀹屾墠缁х画
        System.out.println("閫氱煡椤惧鍙栭");
    }
}

鈥?strong>鈥嬭繖閲岃棌鐫€涓や釜鐭ヨ瘑鐐光€?/strong>鈥嬶細

  1. 鐢╯leep()妯℃嫙鑰楁椂鎿嶄綔
  2. 鐢╦oin()淇濊瘉涓荤嚎绋嬬瓑瀛愮嚎绋嬫墽琛屽畬

浜斻€侀偅浜涘勾鎴戣俯杩囩殑鍧?/h3>
  1. 鈥?strong>鈥媙otify()闅忔満鍞ら啋鈥?/strong>鈥嬶細鏈夋鍐欒鍗曠郴缁燂紝涓変釜绾跨▼绛夋敮浠樼粨鏋滐紝缁撴灉notify()姣忔闅忔満鍞ら啋涓€涓紝鏈€鍚庢敼鎴恘otifyAll()鎵嶈В鍐?/li>
  2. 鈥?strong>鈥媦ield()涓嶆槸涓囪兘鑽€?/strong>鈥嬶細璇曞浘鐢▂ield()瑙e喅绾跨▼楗ラタ闂锛岀粨鏋滃彂鐜板畠鍙槸"寤鸿"璁╁嚭CPU锛屽叿浣撹繕寰楃湅鎿嶄綔绯荤粺鑴歌壊
  3. 鈥?strong>鈥嬪畧鎶ょ嚎绋嬬殑鍧戔€?/strong>鈥嬶細鐢╯etDaemon(true)鍋氬悗鍙颁换鍔★紝缁撴灉涓荤嚎绋嬩竴缁撴潫锛屽畧鎶ょ嚎绋嬬洿鎺ユ毚姣欙紝鏁版嵁閮芥病淇濆瓨

鍏€佷釜浜鸿娉粡楠?/h3>

璇村彞鎺忓績绐濆瓙鐨勮瘽锛屽绾跨▼缂栫▼灏卞儚鐐掕彍鈥斺€旂伀鍊欙紙绾跨▼璋冨害锛夋帉鎻′笉濂藉氨瀹规槗缈昏溅銆傛垜寤鸿鏂版墜锛?/p>

  1. 鍏堢敤鏈€绠€鍗曠殑synchronized锛屽埆鎬ョ潃涓奓ock
  2. 浼樺厛鐢ㄧ嚎绋嬫睜锛屽埆鍔ㄤ笉鍔╪ew Thread()
  3. 涓€瀹氳鍐欏紓甯稿鐞嗭紝鐗瑰埆鏄疘nterruptedException
  4. 璋冭瘯鏃跺鐢═hread.currentThread().getName()鐪嬪綋鍓嶇嚎绋?/li>

璁颁綇鍟婂厔寮熶滑锛屽绾跨▼涓嶆槸鐜勫锛屽氨鏄緱澶氬啓澶氳俯鍧戙€傚垰寮€濮嬪彲鑳借寰?鎴戝啓鐨勪唬鐮佹€庝箞鑰佹娊椋?锛岀瓑鐪熸鎼炴槑鐧借繖鍑犱釜鏍稿績鏂规硶鐨勮劸姘旓紝浣犲氨浼氬彂鐜扳€斺€斿搸锛熷師鏉ユ垜涔熻兘褰撳苟鍙戝ぇ绁烇紒

本文由嘻道妙招独家原创,未经允许,严禁转载