
嘻道奇闻
- 文章199742
- 阅读14625734
电商秒杀场景下的Java线程实战:3种创建方法对比与代码实现
奇闻2025-05-28 07:03:00
锛堟鏂囬噰鐢ㄣ€屽満鏅棶棰?>鎶€鏈柟妗?>浠g爜瀹炵幇->鏂规瀵规瘮銆嶇殑閫掕繘缁撴瀯锛?/p>
鈥?strong>鈥嬪満鏅棝鐐光€?/strong>鈥嬶細鏌愮數鍟嗗钩鍙板湪618绉掓潃娲诲姩涓紝棰戠箒鍑虹幇搴撳瓨瓒呭崠銆佹帴鍙h秴鏃剁瓑闂銆傛妧鏈洟闃熷彂鐜版牳蹇冨師鍥犲湪浜庣嚎绋嬩娇鐢ㄦ柟寮忎笉褰擄細鏈夌殑涓氬姟杩囧害鍒涘缓Thread瀵硅薄锛屾湁鐨勫紓姝ヤ换鍔$己涔忕粺涓€绠$悊...
涓€銆佺户鎵縏hread绫?- 蹇€熼獙璇佸満鏅?/h3>
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細鏂板姛鑳藉揩閫熷師鍨嬮獙璇併€佺畝鍗曞崟娆′换鍔℃墽琛?/p>
java澶嶅埗// 鎶㈣喘鏃ュ織璁板綍绾跨▼ class LogThread extends Thread { @Override public void run() { System.out.println("[" + getName() + "] 寮€濮嬭褰曠鏉€鏃ュ織..."); // 妯℃嫙鏃ュ織鍐欏叆鎿嶄綔 } } // 浣跨敤绀轰緥 new LogThread().start(); // 鍚姩鍗抽攢姣?/span>
鈿狅笍 缂洪櫡璀︾ず锛氬娆$鏉€璇锋眰浼氫骇鐢熷ぇ閲忕嚎绋嬪璞★紝澧炲姞GC鍘嬪姏
浜屻€佸疄鐜癛unnable鎺ュ彛 - 璧勬簮澶嶇敤鍦烘櫙
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佸叡浜祫婧愶紙濡傜鏉€搴撳瓨锛夈€佹帶鍒跺苟鍙戞祦绋?/p>
java澶嶅埗// 搴撳瓨鎵e噺浠诲姟 class InventoryTask implements Runnable { private static int stock = 100; // 鍏变韩璧勬簮 @Override public void run() { synchronized(this) { if(stock > 0) { System.out.println(Thread.currentThread().getName() + " 鎵e噺搴撳瓨锛屽墿浣欙細" + --stock); } } } } // 浣跨敤绀轰緥 Runnable task = new InventoryTask(); new Thread(task, "鐢ㄦ埛A").start(); // 澶氱嚎绋嬪叡浜悓涓€task new Thread(task, "鐢ㄦ埛B").start();
馃攽 浼樺娍瑙h锛氱浉鍚屼换鍔″彲澶嶇敤锛屾洿鏄撳疄鐜拌祫婧愬悓姝ユ帶鍒?/p>
涓夈€佺嚎绋嬫睜ExecutorService - 楂樺苟鍙戝満鏅?/h3>
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細澶ф祦閲忕鏉€璇锋眰锛堝涓囦汉鍚屾椂鎶㈣喘锛?/p>
java澶嶅埗// 鍒涘缓鍚?0涓牳蹇冪嚎绋嬬殑绉掓潃绾跨▼姹?/span> ExecutorService seckillPool = Executors.newFixedThreadPool(10); // 鎻愪氦1000涓姠璐姹?/span> IntStream.range(0,1000).forEach(i -> { seckillPool.execute(() -> { System.out.println(Thread.currentThread().getName() + " 澶勭悊鎶㈣喘璇锋眰ID:" + i); // 瀹為檯涓氬姟澶勭悊閫昏緫 }); }); seckillPool.shutdown(); // 骞虫粦鍏抽棴
馃殌 鐢熶骇绾ч厤缃細寤鸿鑷畾涔塗hreadPoolExecutor锛岃缃槦鍒楀閲忓拰鎷掔粷绛栫暐
鍥涖€佸満鏅寲閫夊瀷鎸囧崡锛堝喅绛栨爲锛?/h3>
- 鏄惁闇€瑕佽祫婧愰殧绂伙紵 鈫?鏄細閫塗hread / 鍚︼細閫塕unnable
- 璇锋眰閲忔槸鍚﹁秴杩?000娆?绉掞紵 鈫?鏄細蹇呴』鐢ㄧ嚎绋嬫睜
- 鏄惁闇€瑕佷换鍔¢槦鍒楃鐞嗭紵 鈫?鏄細閫塗hreadPoolExecutor
- 鏄惁娑夊強璧勬簮绔炰簤锛?鈫?鏄細浼樺厛Runnable+鍚屾鏈哄埗
鈥?strong>鈥嬩紭鍖栨垚鏋溾€?/strong>鈥嬶細缁忚繃绾跨▼姹犳敼閫犲悗锛岃骞冲彴鍦ㄥ弻11鏈熼棿鎴愬姛鏀拺5涓嘠PS锛岀郴缁熻祫婧愭秷鑰楅檷浣?0%锛堟暟鎹潵鑷敓浜х洃鎺э級