线程必须实现runnable接口吗 简述创建一个线程时实现Runnable接口和继承Thread...
\u4e3a\u4ec0\u4e48\u8981\u5b9e\u73b0Runnable\u63a5\u53e3\uff0c\u6765\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff1f\u628aThread\u4f5c\u4e3a\u7236\u7c7b\u5219\u4e0d\u80fd\u5462\uff1f\u5f53\u7136\u53ef\u4ee5\uff0c\u8fd9\u662f\u662f\u505a\u7ebf\u7a0b\u7684\u4e24\u4e2a\u65b9\u6cd5
\u521b\u5efa\u65b0\u6267\u884c\u7ebf\u7a0b\u6709\u4e24\u79cd\u65b9\u6cd5\u3002\u4e00\u79cd\u65b9\u6cd5\u662f\u5c06\u7c7b\u58f0\u660e\u4e3a Thread \u7684\u5b50\u7c7b\u3002\u8be5\u5b50\u7c7b\u5e94\u91cd\u5199 Thread \u7c7b\u7684 run \u65b9\u6cd5\u3002\u63a5\u4e0b\u6765\u53ef\u4ee5\u5206\u914d\u5e76\u542f\u52a8\u8be5\u5b50\u7c7b\u7684\u5b9e\u4f8b\u3002\u4f8b\u5982\uff0c\u8ba1\u7b97\u5927\u4e8e\u67d0\u4e00\u89c4\u5b9a\u503c\u7684\u8d28\u6570\u7684\u7ebf\u7a0b\u53ef\u4ee5\u5199\u6210\uff1a
--------------------------------------------------------------------------------
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
\u7136\u540e\uff0c\u4e0b\u5217\u4ee3\u7801\u4f1a\u521b\u5efa\u5e76\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\uff1a
PrimeThread p = new PrimeThread(143);
p.start();
\u521b\u5efa\u7ebf\u7a0b\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u58f0\u660e\u5b9e\u73b0 Runnable \u63a5\u53e3\u7684\u7c7b\u3002\u8be5\u7c7b\u7136\u540e\u5b9e\u73b0 run \u65b9\u6cd5\u3002\u7136\u540e\u53ef\u4ee5\u5206\u914d\u8be5\u7c7b\u7684\u5b9e\u4f8b\uff0c\u5728\u521b\u5efa Thread \u65f6\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u6765\u4f20\u9012\u5e76\u542f\u52a8\u3002\u91c7\u7528\u8fd9\u79cd\u98ce\u683c\u7684\u540c\u4e00\u4e2a\u4f8b\u5b50\u5982\u4e0b\u6240\u793a\uff1a
--------------------------------------------------------------------------------
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
\u7136\u540e\uff0c\u4e0b\u5217\u4ee3\u7801\u4f1a\u521b\u5efa\u5e76\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\uff1a
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u6709\u4e00\u4e2a\u6807\u8bc6\u540d\uff0c\u591a\u4e2a\u7ebf\u7a0b\u53ef\u4ee5\u540c\u540d\u3002\u5982\u679c\u7ebf\u7a0b\u521b\u5efa\u65f6\u6ca1\u6709\u6307\u5b9a\u6807\u8bc6\u540d\uff0c\u5c31\u4f1a\u4e3a\u5176\u751f\u6210\u4e00\u4e2a\u65b0\u540d\u79f0\u3002
\u5f53\u7136\u53ef\u4ee5\uff0c\u8fd9\u662f\u662f\u505a\u7ebf\u7a0b\u7684\u4e24\u4e2a\u65b9\u6cd5
\u521b\u5efa\u65b0\u6267\u884c\u7ebf\u7a0b\u6709\u4e24\u79cd\u65b9\u6cd5\u3002\u4e00\u79cd\u65b9\u6cd5\u662f\u5c06\u7c7b\u58f0\u660e\u4e3a Thread \u7684\u5b50\u7c7b\u3002\u8be5\u5b50\u7c7b\u5e94\u91cd\u5199 Thread \u7c7b\u7684 run \u65b9\u6cd5\u3002\u63a5\u4e0b\u6765\u53ef\u4ee5\u5206\u914d\u5e76\u542f\u52a8\u8be5\u5b50\u7c7b\u7684\u5b9e\u4f8b\u3002\u4f8b\u5982\uff0c\u8ba1\u7b97\u5927\u4e8e\u67d0\u4e00\u89c4\u5b9a\u503c\u7684\u8d28\u6570\u7684\u7ebf\u7a0b\u53ef\u4ee5\u5199\u6210\uff1a
--------------------------------------------------------------------------------
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
\u7136\u540e\uff0c\u4e0b\u5217\u4ee3\u7801\u4f1a\u521b\u5efa\u5e76\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\uff1a
PrimeThread p = new PrimeThread(143);
p.start();
\u521b\u5efa\u7ebf\u7a0b\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u58f0\u660e\u5b9e\u73b0 Runnable \u63a5\u53e3\u7684\u7c7b\u3002\u8be5\u7c7b\u7136\u540e\u5b9e\u73b0 run \u65b9\u6cd5\u3002\u7136\u540e\u53ef\u4ee5\u5206\u914d\u8be5\u7c7b\u7684\u5b9e\u4f8b\uff0c\u5728\u521b\u5efa Thread \u65f6\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u6765\u4f20\u9012\u5e76\u542f\u52a8\u3002\u91c7\u7528\u8fd9\u79cd\u98ce\u683c\u7684\u540c\u4e00\u4e2a\u4f8b\u5b50\u5982\u4e0b\u6240\u793a\uff1a
--------------------------------------------------------------------------------
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
\u7136\u540e\uff0c\u4e0b\u5217\u4ee3\u7801\u4f1a\u521b\u5efa\u5e76\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\uff1a
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u6709\u4e00\u4e2a\u6807\u8bc6\u540d\uff0c\u591a\u4e2a\u7ebf\u7a0b\u53ef\u4ee5\u540c\u540d\u3002\u5982\u679c\u7ebf\u7a0b\u521b\u5efa\u65f6\u6ca1\u6709\u6307\u5b9a\u6807\u8bc6\u540d\uff0c\u5c31\u4f1a\u4e3a\u5176\u751f\u6210\u4e00\u4e2a\u65b0\u540d\u79f0\u3002
在使用Thread的时候只需要new一个实例出来,调用start()方法即可以启动一个线程。
Thread Test = new Thread();
Test.start();
在使用Runnable的时候需要先new一个继承Runnable的实例,之后用子类Thread调用。
Test impelements Runnable
Test t = new Test();
Thread test = new Thread(t);
绛旓細1銆侀氳繃缁ф壙Thread绫伙紝閲嶅啓run鏂规硶鏉ュ疄鐜板绾跨▼銆傚彲浠ラ氳繃鍒涘缓Thread瀵硅薄骞惰皟鐢╯tart鏂规硶鏉ュ惎鍔ㄧ嚎绋嬨2銆侀氳繃瀹炵幇Runnable鎺ュ彛锛岄噸鍐檙un鏂规硶鏉ュ疄鐜板绾跨▼銆傚彲浠ラ氳繃鍒涘缓Thread瀵硅薄骞跺皢Runnable瀵硅薄浼犻掔粰鍏舵瀯閫犲嚱鏁版潵鍚姩绾跨▼銆3銆侀氳繃瀹炵幇Callable鎺ュ彛锛岄噸鍐檆all鏂规硶鏉ュ疄鐜板绾跨▼銆傚彲浠ラ氳繃鍒涘缓FutureTask瀵硅薄骞跺皢...
绛旓細鍒涘缓绾跨▼鏈変袱绉嶆柟娉曘備竴绉嶆槸瀹炵幇Runnable鎺ュ彛锛岄噸鍐檙un()鏂规硶锛涘彟澶栦竴绉嶆槸缁ф壙Thread绫汇
绛旓細public Thread 锛圱hreadGroup group锛Runnable target锛孲tring name锛夛紱鍏朵腑锛実roup 鎸囨槑璇绾跨▼鎵灞炵殑绾跨▼缁勶紱target瀹為檯鎵ц绾跨▼浣撶殑鐩爣瀵硅薄锛屽畠蹇呴』瀹炵幇鎺ュ彛Runnable锛 name涓虹嚎绋嬪悕銆侸ava涓殑姣忎釜绾跨▼閮芥湁鑷繁鐨勫悕绉帮紝Java鎻愪緵浜嗕笉鍚孴hread绫绘瀯閫犲櫒锛屽厑璁哥粰绾跨▼鎸囧畾鍚嶇О銆傚鏋渘ame涓簄ull鏃讹紝鍒橨ava鑷姩鎻愪緵...
绛旓細鐒跺悗瀵瑰洓绉嶆柟寮忚繘琛屼竴涓畝鍗曞垎绫伙細鏃犺繑鍥炲硷細1.缁ф壙thread绫 2.瀹炵幇runnable鎺ュ彛 鏈夎繑鍥炲硷細3.callable鎺ュ彛 4.绾跨▼姹 涔熷彲浠ヨ鏄笁绉嶆柟寮忥紝绾跨▼姹犳槸涓绉嶅皝瑁呭ソ鐨勬妧鏈傚疄鐜癱allable鎺ュ彛浼氭湁涓涓硾鍨嬶紝杩欐硾鍨嬪嵆浠h〃杩斿洖鍊肩殑绫诲瀷銆傞噸鍐檆all()鏂规硶锛屽緱鍒拌繑鍥炲笺傜劧鍚庢敞鎰忚繖閲屼娇鐢ㄧ殑鏃跺欐槸鍏堝皢瀹炰緥浼犲叆...
绛旓細閫氳繃缁ф壙Thread瀹炵幇鐨绾跨▼绫伙紝澶氫釜绾跨▼闂存棤娉曞叡浜嚎绋嬬被鐨勫疄渚嬪彉閲忋傦紙闇瑕鍒涘缓涓嶅悓Thread瀵硅薄锛岃嚜鐒朵笉鍏变韩锛変簩銆 閫氳繃Runnable鎺ュ彛鍒涘缓绾跨▼绫 璇ユ柟娉曢渶瑕佸厛 瀹氫箟涓涓被瀹炵幇Runnable鎺ュ彛锛屽苟閲嶅啓璇ユ帴鍙g殑 run() 鏂规硶锛屾run鏂规硶鏄嚎绋嬫墽琛屼綋銆傛帴鐫鍒涘缓 Runnable瀹炵幇绫荤殑瀵硅薄锛屼綔涓哄垱寤篢hread瀵硅薄鐨勫弬鏁皌arget锛...
绛旓細MyThread m1 = new MyThread();浣犺嚜宸卞啓鐨勪竴涓绾跨▼锛屽疄渚嬪寲 m1.setName("T1");璁剧疆浣犺嚜宸卞啓鐨勭嚎绋嬪悕瀛 m1.start();鍚姩绾跨▼ MyRun m = new MyRun();杩欎釜涔熸槸瀹炰緥鍖栫嚎绋嬶紝鍥犱负浣犻噰鐢ㄧ殑鏄 Thread t = new Thread(m);鍥犱负浣犺繖涓嚎绋嬫槸閲囩敤瀹炵幇Runnable锛屽洜涓哄畠娌tart()鏂规硶锛屾墍浠ュ氨蹇呴』瑕...
绛旓細澶氱嚎绋嬫湁涓夌甯歌鐨勫疄鐜版柟寮忥細1. 缁ф壙Thread绫,閲嶅啓run鏂规硶銆2. 瀹炵幇Runnable鎺ュ彛,閲嶅啓run鏂规硶銆3. 閫氳繃瀹炵幇Callable鎺ュ彛鍜屼娇鐢‵utureTask鍖呰鍣ㄦ潵瀹炵幇绾跨▼ / 閫氳繃鑷繁鐨勭被鐩存帴缁ф壙(extend) Thread锛屽苟澶嶉噸鍐檙un()鏂规硶锛屽氨鍙互閫氳繃Thread绫荤殑start()鏂规硶鍚姩绾跨▼锛屽苟鎵ц鑷繁瀹氫箟鐨剅un()鏂规硶銆俆hread...
绛旓細鍦╦ava涓紝鍏跺疄java涓疄鐜 澶绾跨▼鏈変笁绉嶆柟娉曪紝涓绉嶆槸缁ф壙Thread绫伙紱绗簩绉嶆槸瀹炵幇Runnable鎺ュ彛锛涚涓夌鏄疄鐜癈allable鎺ュ彛銆1锛岀户鎵縏hread Thread绫绘槸鍦╦ava.lang鍖呬腑瀹氫箟鐨勩備竴涓被鍙缁ф壙浜員hread绫诲悓鏃惰鍐欎簡鏈被涓殑run()鏂规硶灏卞彲浠ュ疄鐜板绾跨▼鎿嶄綔浜嗭紝浣嗘槸涓涓被鍙兘缁ф壙涓涓埗绫伙紝杩欐槸姝ゆ柟娉曠殑灞闄...
绛旓細锛1锛夊畾涔塗hread绫荤殑瀛愮被锛屽苟閲嶅啓璇ョ被鐨剅un鏂规硶锛岃run鏂规硶鐨勬柟娉曚綋灏变唬琛ㄤ簡绾跨▼瑕瀹屾垚鐨勪换鍔°傚洜姝ゆ妸run()鏂规硶绉颁负鎵ц浣撱傦紙2锛夊垱寤篢hread瀛愮被鐨勫疄渚嬶紝鍗冲垱寤轰簡绾跨▼瀵硅薄銆傦紙3锛夎皟鐢ㄧ嚎绋嬪璞$殑start()鏂规硶鏉ュ惎鍔ㄨ绾跨▼銆備簩銆侀氳繃Runnable鎺ュ彛鍒涘缓绾跨▼绫 锛1锛夊畾涔runnable鎺ュ彛鐨瀹炵幇绫伙紝骞堕噸鍐欒鎺ュ彛鐨...
绛旓細蹇呴』渚濇墭鍏朵粬绫汇傝孴hread绫伙紝鏈変竴涓瀯閫犳柟娉曪紝鍙傛暟鏄疪unnable瀵硅薄锛屼篃灏辨槸璇村彲浠ラ氳繃Thread绫绘潵鍚姩Runnable瀹炵幇鐨勫绾跨▼銆俒java] view plain copy public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0);} 鎵浠ワ紝瀹炵幇Runnable鎺ュ彛鍚庯紝闇瑕浣跨敤Thread绫绘潵鍚姩銆