创建线程的几种方式

Java中创建线程主要有三种方式:

一、继承Thread类创建线程类

(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。

(2)创建Thread子类的实例,即创建了线程对象。

(3)调用线程对象的start()方法来启动该线程。

二、通过Runnable接口创建线程类

(1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

(2)创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

(3)调用线程对象的start()方法来启动该线程。

三、通过Callable和Future创建线程

(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。

(2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

(3)使用FutureTask对象作为Thread对象的target创建并启动新线程。

(4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。



  • 濡備綍鍒涘缓绾跨▼?濡備綍淇濊瘉绾跨▼瀹夊叏?
    绛旓細鍦╦ava涓鏋滆鍒涘缓绾跨▼鐨璇濓紝涓鑸湁涓ょ鏂瑰紡锛1.缁ф壙Thread绫伙紱2.瀹炵幇Runnable鎺ュ彛銆傜嚎绋嬪畨鍏細绾跨▼瀹夊叏灏辨槸澶氱嚎绋嬭闂椂锛岄噰鐢ㄤ簡鍔犻攣鏈哄埗锛屽綋涓涓嚎绋嬭闂绫荤殑鏌愪釜鏁版嵁鏃讹紝杩涜淇濇姢锛屽叾浠栫嚎绋嬩笉鑳借繘琛岃闂洿鍒拌绾跨▼璇诲彇瀹岋紝鍏朵粬绾跨▼鎵嶅彲浣跨敤銆備笉浼氬嚭鐜版暟鎹笉涓鑷存垨鑰呮暟鎹薄鏌撱 绾跨▼涓嶅畨鍏ㄥ氨鏄笉鎻愪緵...
  • 鍒涘缓澶绾跨▼鏈鍑犵鏂规硶
    绛旓細new Thread(thread,"鏈夎繑鍥炲肩殑绾跨▼").start();System.out.println(thread.get());} } 浣跨敤瀹炵幇Runnable鎺ュ彛鏂瑰紡鍒涘缓绾跨▼鍙互鍏变韩鍚屼竴涓洰鏍囧璞★紙TreadDemo1 tt=new TreadDemo1();锛夛紝瀹炵幇浜嗗涓浉鍚岀嚎绋嬪鐞嗗悓涓浠借祫婧愩傜劧鍚庡啀鐪嬩竴娈垫潵鑷狫DK鐨勮В閲婏細The Runnable interface should be implemented by...
  • 绾跨▼姹犵殑鍥涚鍒涘缓鏂瑰紡鍙婂尯鍒
    绛旓細鑻绾跨▼姹犲凡婊★紝鍒欓噰鐢ㄦ嫆缁濈瓥鐣ュ鐞嗘棤娉曟墽鎵ц鐨勪换鍔★紝鎷掔粷绛栫暐鍜宧andler鍙傛暟鏈夊叧 鎷掔粷绛栫暐 鎷掔粷绛栫暐 => 榛樿閲囩敤鐨勬槸AbortPolicy鎷掔粷绛栫暐锛岀洿鎺ュ湪绋嬪簭涓姏鍑篟ejectedExecutionException寮傚父銆愬洜涓烘槸杩愯鏃跺紓甯革紝涓嶅己鍒禼atch銆戯紝杩欑澶勭悊鏂瑰紡涓嶅浼橀泤銆傚鐞嗘嫆缁濈瓥鐣ユ湁浠ヤ笅鍑犵姣旇緝鎺ㄨ崘锛氬湪绋嬪簭涓崟鑾稲ejectedExecution...
  • 鍦↗ava 涓绾跨▼鐨瀹炵幇鏂规硶鏈夊摢浜,濡備綍浣跨敤
    绛旓細鍚屾牱鐨,涓庡疄鐜癛unnable鎺ュ彛鍒涘缓绾跨▼鏂瑰紡鐩镐技,涓嶅悓鐨勫湴鏂瑰湪浜 1 Thread thread = new MyThread(myRunnable); 閭d箞杩欑鏂瑰紡鍙互椤哄埄鍒涘缓鍑轰竴涓柊鐨勭嚎绋嬩箞?绛旀鏄偗瀹氱殑銆傝嚦浜庢鏃剁殑绾跨▼鎵ц浣撳埌搴曟槸MyRunnable鎺ュ彛涓殑run()鏂规硶杩樻槸MyThread绫讳腑鐨剅un()鏂规硶鍛?閫氳繃杈撳嚭鎴戜滑鐭ラ亾绾跨▼鎵ц浣撴槸MyThread绫讳腑鐨剅un()鏂规硶銆
  • 濡備綍鍒涘缓鍜屽惎鍔ㄤ竴涓绾跨▼
    绛旓細1銆佽璁′竴涓嚎绋嬶紝浜х敓涓変釜绾跨▼瀵硅薄锛岃缃笁涓绾跨▼鐨浼戠湢鏃堕棿锛10s锛20s锛30s銆備富瑕侀噰鐢═hread绫伙紝Runable鎺ュ彛銆2銆乼hread绫绘槸java.lang鍖呬腑瀹氫箟鐨勶紝涓涓被鍙缁ф壙Thread绫伙紝姝ょ被灏辨槸澶氱嚎绋嬫搷浣滅被浣跨敤Threa绫诲疄鐜般3銆佹祴璇曡繍琛岀粨鏋溿4銆佷娇鐢╮unnable鎺ュ彛瀹炵幇锛岀被涓病鏈夌嚎绋嬪悕绉板瓧娈碉紝鎵浠ュ缓绔嬩竴涓猲ame灞炴...
  • 鍦ㄥ绾跨▼缂栫▼涓,绾跨▼鐨鎵ц鏂瑰紡閫氬父鏄
    绛旓細鍥涚澶氱嚎绋嬪疄鐜鏂瑰紡锛1. Thread瑁哥嚎绋 绾跨▼鏄苟鍙戠殑鍩烘湰鍗曞厓锛屾瘡涓嚎绋嬪璞″搴旂潃涓涓绠楁満搴曞眰绾跨▼銆傜嚎绋嬫湁鑷繁鐨勬爤绌洪棿锛屽崰鐢↗VM杩涚▼绌洪棿鐨勬寚瀹氶儴鍒嗐傞氳繃鎻愪緵Runnable骞惰皟鐢╯tart寮濮嬫墽琛岋紝娌℃湁鐜版垚鐨凙PI鏉ョ粨鏉熺嚎绋嬶紝闇瑕佽嚜宸卞疄鐜般傝繖绉嶆柟寮忎紭鐐规槸鎺ヨ繎鎿嶄綔绯荤粺/纭欢妯″瀷鐨勫苟鍙戣绠楋紝浣鍒涘缓绾跨▼闇瑕佽楄垂澶ч噺鍐呭瓨...
  • 澶绾跨▼鐨勫嚑绉瀹炵幇鏂瑰紡
    绛旓細1銆佺户鎵縏hread绫鍒涘缓绾跨▼Thread绫绘湰璐ㄤ笂鏄疄鐜颁簡Runnable鎺ュ彛鐨勪竴涓疄渚嬶紝浠h〃涓涓绾跨▼鐨瀹炰緥銆傚惎鍔ㄧ嚎绋嬬殑鍞竴鏂规硶灏辨槸閫氳繃Thread绫荤殑start()瀹炰緥鏂规硶銆俿tart()鏂规硶鏄竴涓猲ative鏂规硶锛屽畠灏嗗惎鍔ㄤ竴涓柊绾跨▼锛屽苟鎵цrun()鏂规硶銆傝繖绉鏂瑰紡瀹炵幇澶氱嚎绋嬪緢绠鍗曪紝閫氳繃鑷繁鐨勭被鐩存帴extend Thread锛屽苟澶嶅啓run()鏂规硶锛屽氨...
  • 鍒涘缓绾跨▼鏈夊摢涓ょ鏂规硶,瀹冧滑鍚勮嚜鐨勪紭缂虹偣鏄粈涔?
    绛旓細绾跨▼鍒涘缓鏂瑰紡鍙婁紭缂虹偣 1.缁ф壙Thread绫 2.瀹炵幇Runnable鎺ュ彛3.瀹炵幇Callable鎺ュ彛 4.绾跨▼姹犳柟寮 浼樼己鐐 1.缁ф壙Thread绫 浼樼偣 銆佷唬鐮佺畝鍗 銆傜己鐐 銆佽绫绘棤娉曢泦鎴愬埆鐨勭被銆2.瀹炵幇Runnable鎺ュ彛 浼樼偣 銆佺户鎵垮叾浠栫被銆傚悓涓瀹炵幇璇ユ帴鍙g殑瀹炰緥鍙互鍏变韩璧勬簮銆傜己鐐 銆佷唬鐮佸鏉 3.瀹炵幇Callable 浼樼偣 銆佸彲浠ヨ幏寰楀紓姝ヤ换鍔$殑...
  • 澶绾跨▼瀹炵幇鐨勫洓绉鏂瑰紡
    绛旓細澶氱嚎绋嬪疄鐜扮殑鍥涚鏂瑰紡Thread瑁哥嚎绋嬨丒xecutor鏈嶅姟銆丗orkJoin妗嗘灦銆丄ctor妯″瀷銆1銆乀hread瑁哥嚎绋 绾跨▼鏄苟鍙戞渶鍩烘湰鐨勫崟鍏冦侸ava绾跨▼鏈川涓婅鏄犲皠鍒版搷浣滅郴缁熺嚎绋嬶紝骞朵笖姣忎釜绾跨▼瀵硅薄瀵瑰簲鐫涓涓绠楁満搴曞眰绾跨▼銆傛瘡涓嚎绋嬫湁鑷繁鐨勬爤绌洪棿锛屽畠鍗犵敤浜咼VM杩涚▼绌洪棿鐨勬寚瀹氫竴閮ㄥ垎銆绾跨▼鐨鎺ュ彛鐩稿綋绠鏄庯紝浣犲彧闇瑕佹彁渚涗竴涓猂unnable...
  • 澶绾跨▼鐨涓夌甯歌瀹炵幇鏂瑰紡
    绛旓細澶绾跨▼鏈変笁绉嶅父瑙佺殑瀹炵幇鏂瑰紡锛1. 缁ф壙Thread绫,閲嶅啓run鏂规硶銆2. 瀹炵幇Runnable鎺ュ彛,閲嶅啓run鏂规硶銆3. 閫氳繃瀹炵幇Callable鎺ュ彛鍜屼娇鐢‵utureTask鍖呰鍣ㄦ潵瀹炵幇绾跨▼ / 閫氳繃鑷繁鐨勭被鐩存帴缁ф壙(extend) Thread锛屽苟澶嶉噸鍐檙un()鏂规硶锛屽氨鍙互閫氳繃Thread绫荤殑start()鏂规硶鍚姩绾跨▼锛屽苟鎵ц鑷繁瀹氫箟鐨剅un()鏂规硶銆俆hread...
  • 扩展阅读:多线程面试题 ... java线程池的七个参数 ... 线程池的7种创建方式 ... 多线程实现的四种方式 ... 为什么不建议用线程池 ... 写出创建多线程的方式 ... 线程的几种状态 ... 创建线程池的四种方法 ... java创建线程池的几种方式 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网