java实现多线程的两种方法 java多线程有几种实现方法,都是什么?同步有几种实现方法,...

JAVA\u591a\u7ebf\u7a0b\u6709\u54ea\u51e0\u79cd\u5b9e\u73b0\u65b9\u5f0f

JAVA\u591a\u7ebf\u7a0b\u5b9e\u73b0\u65b9\u5f0f\u4e3b\u8981\u6709\u4e09\u79cd\uff1a\u7ee7\u627fThread\u7c7b\u3001\u5b9e\u73b0Runnable\u63a5\u53e3\u3001\u4f7f\u7528ExecutorService\u3001Callable\u3001Future\u5b9e\u73b0\u6709\u8fd4\u56de\u7ed3\u679c\u7684\u591a\u7ebf\u7a0b\u3002\u5176\u4e2d\u524d\u4e24\u79cd\u65b9\u5f0f\u7ebf\u7a0b\u6267\u884c\u5b8c\u540e\u90fd\u6ca1\u6709\u8fd4\u56de\u503c\uff0c\u53ea\u6709\u6700\u540e\u4e00\u79cd\u662f\u5e26\u8fd4\u56de\u503c\u7684\u3002
1\u3001\u7ee7\u627fThread\u7c7b\u5b9e\u73b0\u591a\u7ebf\u7a0b\u7ee7\u627fThread\u7c7b\u7684\u65b9\u6cd5\u5c3d\u7ba1\u88ab\u6211\u5217\u4e3a\u4e00\u79cd\u591a\u7ebf\u7a0b\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46Thread\u672c\u8d28\u4e0a\u4e5f\u662f\u5b9e\u73b0\u4e86Runnable\u63a5\u53e3\u7684\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u4ee3\u8868\u4e00\u4e2a\u7ebf\u7a0b\u7684\u5b9e\u4f8b\uff0c\u5e76\u4e14\uff0c\u542f\u52a8\u7ebf\u7a0b\u7684\u552f\u4e00\u65b9\u6cd5\u5c31\u662f\u901a\u8fc7Thread\u7c7b\u7684start()\u5b9e\u4f8b\u65b9\u6cd5\u3002start()\u65b9\u6cd5\u662f\u4e00\u4e2anative\u65b9\u6cd5\uff0c\u5b83\u5c06\u542f\u52a8\u4e00\u4e2a\u65b0\u7ebf\u7a0b\uff0c\u5e76\u6267\u884crun()\u65b9\u6cd5\u3002\u8fd9\u79cd\u65b9\u5f0f\u5b9e\u73b0\u591a\u7ebf\u7a0b\u5f88\u7b80\u5355\uff0c\u901a\u8fc7\u81ea\u5df1\u7684\u7c7b\u76f4\u63a5extend Thread\uff0c\u5e76\u590d\u5199run()\u65b9\u6cd5\uff0c\u5c31\u53ef\u4ee5\u542f\u52a8\u65b0\u7ebf\u7a0b\u5e76\u6267\u884c\u81ea\u5df1\u5b9a\u4e49\u7684run()\u65b9\u6cd5\u3002\u4f8b\u5982\uff1a
[java] view plain copy
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
}
}
\u5728\u5408\u9002\u7684\u5730\u65b9\u542f\u52a8\u7ebf\u7a0b\u5982\u4e0b\uff1a[java] view plain copy
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
2\u3001\u5b9e\u73b0Runnable\u63a5\u53e3\u65b9\u5f0f\u5b9e\u73b0\u591a\u7ebf\u7a0b\u5982\u679c\u81ea\u5df1\u7684\u7c7b\u5df2\u7ecfextends\u53e6\u4e00\u4e2a\u7c7b\uff0c\u5c31\u65e0\u6cd5\u76f4\u63a5extends Thread\uff0c\u6b64\u65f6\uff0c\u5fc5\u987b\u5b9e\u73b0\u4e00\u4e2aRunnable\u63a5\u53e3\uff0c\u5982\u4e0b\uff1a[java] view plain copy
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
\u4e3a\u4e86\u542f\u52a8MyThread\uff0c\u9700\u8981\u9996\u5148\u5b9e\u4f8b\u5316\u4e00\u4e2aThread\uff0c\u5e76\u4f20\u5165\u81ea\u5df1\u7684MyThread\u5b9e\u4f8b\uff1a[java] view plain copy
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
\u4e8b\u5b9e\u4e0a\uff0c\u5f53\u4f20\u5165\u4e00\u4e2aRunnable target\u53c2\u6570\u7ed9Thread\u540e\uff0cThread\u7684run()\u65b9\u6cd5\u5c31\u4f1a\u8c03\u7528target.run()\uff0c\u53c2\u8003JDK\u6e90\u4ee3\u7801\uff1a[java] view plain copy
public void run() {
if (target != null) {
target.run();
}
}
3\u3001\u4f7f\u7528ExecutorService\u3001Callable\u3001Future\u5b9e\u73b0\u6709\u8fd4\u56de\u7ed3\u679c\u7684\u591a\u7ebf\u7a0bExecutorService\u3001Callable\u3001Future\u8fd9\u4e2a\u5bf9\u8c61\u5b9e\u9645\u4e0a\u90fd\u662f\u5c5e\u4e8eExecutor\u6846\u67b6\u4e2d\u7684\u529f\u80fd\u7c7b\u3002\u60f3\u8981\u8be6\u7ec6\u4e86\u89e3Executor\u6846\u67b6\u7684\u53ef\u4ee5\u8bbf\u95eehttp://www.javaeye.com/topic/366591 \uff0c\u8fd9\u91cc\u9762\u5bf9\u8be5\u6846\u67b6\u505a\u4e86\u5f88\u8be6\u7ec6\u7684\u89e3\u91ca\u3002\u8fd4\u56de\u7ed3\u679c\u7684\u7ebf\u7a0b\u662f\u5728JDK1.5\u4e2d\u5f15\u5165\u7684\u65b0\u7279\u5f81\uff0c\u786e\u5b9e\u5f88\u5b9e\u7528\uff0c\u6709\u4e86\u8fd9\u79cd\u7279\u5f81\u6211\u5c31\u4e0d\u9700\u8981\u518d\u4e3a\u4e86\u5f97\u5230\u8fd4\u56de\u503c\u800c\u5927\u8d39\u5468\u6298\u4e86\uff0c\u800c\u4e14\u5373\u4fbf\u5b9e\u73b0\u4e86\u4e5f\u53ef\u80fd\u6f0f\u6d1e\u767e\u51fa\u3002\u53ef\u8fd4\u56de\u503c\u7684\u4efb\u52a1\u5fc5\u987b\u5b9e\u73b0Callable\u63a5\u53e3\uff0c\u7c7b\u4f3c\u7684\uff0c\u65e0\u8fd4\u56de\u503c\u7684\u4efb\u52a1\u5fc5\u987bRunnable\u63a5\u53e3\u3002\u6267\u884cCallable\u4efb\u52a1\u540e\uff0c\u53ef\u4ee5\u83b7\u53d6\u4e00\u4e2aFuture\u7684\u5bf9\u8c61\uff0c\u5728\u8be5\u5bf9\u8c61\u4e0a\u8c03\u7528get\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230Callable\u4efb\u52a1\u8fd4\u56de\u7684Object\u4e86\uff0c\u518d\u7ed3\u5408\u7ebf\u7a0b\u6c60\u63a5\u53e3ExecutorService\u5c31\u53ef\u4ee5\u5b9e\u73b0\u4f20\u8bf4\u4e2d\u6709\u8fd4\u56de\u7ed3\u679c\u7684\u591a\u7ebf\u7a0b\u4e86\u3002\u4e0b\u9762\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684\u6709\u8fd4\u56de\u7ed3\u679c\u7684\u591a\u7ebf\u7a0b\u6d4b\u8bd5\u4f8b\u5b50\uff0c\u5728JDK1.5\u4e0b\u9a8c\u8bc1\u8fc7\u6ca1\u95ee\u9898\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002

java\u4e2d\u591a\u7ebf\u7a0b\u7684\u5b9e\u73b0\u65b9\u6cd5\u6709\u4e24\u79cd\uff1a1.\u76f4\u63a5\u7ee7\u627fthread\u7c7b\uff1b2.\u5b9e\u73b0runnable\u63a5\u53e3\uff1b\u540c\u6b65\u7684\u5b9e\u73b0\u65b9\u6cd5\u6709\u4e94\u79cd\uff1a1.\u540c\u6b65\u65b9\u6cd5\uff1b2.\u540c\u6b65\u4ee3\u7801\u5757\uff1b3.\u4f7f\u7528\u7279\u6b8a\u57df\u53d8\u91cf(volatile)\u5b9e\u73b0\u7ebf\u7a0b\u540c\u6b65\uff1b4.\u4f7f\u7528\u91cd\u5165\u9501\u5b9e\u73b0\u7ebf\u7a0b\u540c\u6b65\uff1b5.\u4f7f\u7528\u5c40\u90e8\u53d8\u91cf\u5b9e\u73b0\u7ebf\u7a0b\u540c\u6b65
\u3002
\u5176\u4e2d\u591a\u7ebf\u7a0b\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u9700\u6ce8\u610f\u91cd\u5199\u6216\u8005\u8986\u76d6run()\u65b9\u6cd5\uff0c\u800c\u5bf9\u4e8e\u540c\u6b65\u7684\u5b9e\u73b0\u65b9\u6cd5\u4e2d\u4f7f\u7528\u8f83\u5e38\u4f7f\u7528\u7684\u662f\u5229\u7528synchronized\u7f16\u5199\u540c\u6b65\u65b9\u6cd5\u548c\u4ee3\u7801\u5757\u3002

Thread t1=new Thread(){
public void run(){
System.out.println("第一种方法");
}
};
t1.start();
Thread t2=new Thread(new Runnable() {
public void run() {
System.out.println("第二种方法,可实现同类下各线程数据共享");
}
});
t2.start();

你好,java实现多线程的两种方法是

1、继承Thread
2、实现Runnable

实现Runnable接口,或者继承Thread类。
然后重写run()方法。

  • 鍦Java 涓绾跨▼鐨勫疄鐜版柟娉鏈夊摢浜,濡備綍浣跨敤锝烇綖锝炴
    绛旓細Java涓疄鐜板绾跨▼鏈変袱绉嶉斿緞锛氱户鎵縏hread绫绘垨鑰呭疄鐜癛unnable鎺ュ彛銆俁unnable鏄帴鍙o紝寤鸿鐢ㄦ帴鍙g殑鏂瑰紡鐢熸垚绾跨▼锛屽洜涓烘帴鍙e彲浠ュ疄鐜板缁ф壙锛屽喌涓擱unnable鍙湁涓涓猺un鏂规硶锛屽緢閫傚悎缁ф壙銆傚湪浣跨敤Thread鐨勬椂鍊欏彧闇缁ф壙Thread锛屽苟涓攏ew涓涓疄渚嬪嚭鏉ワ紝璋冪敤start()鏂规硶鍗冲彲浠ュ惎鍔ㄤ竴涓嚎绋嬨俆hread Test = new Thread();Test...
  • java澶氱嚎绋嬫湁鍑犵瀹炵幇鏂规硶,閮芥槸浠涔?鍚屾鏈夊嚑绉嶅疄鐜版柟娉,閮芥槸浠涔?
    绛旓細java涓绾跨▼鐨勫疄鐜版柟娉曟湁涓ょ锛1.鐩存帴缁ф壙thread绫伙紱2.瀹炵幇runnable鎺ュ彛锛涘悓姝ョ殑瀹炵幇鏂规硶鏈変簲绉嶏細1.鍚屾鏂规硶锛2.鍚屾浠g爜鍧楋紱3.浣跨敤鐗规畩鍩熷彉閲(volatile)瀹炵幇绾跨▼鍚屾锛4.浣跨敤閲嶅叆閿佸疄鐜扮嚎绋嬪悓姝ワ紱5.浣跨敤灞閮ㄥ彉閲忓疄鐜扮嚎绋嬪悓姝 銆傚叾涓绾跨▼瀹炵幇杩囩▼涓渶娉ㄦ剰閲嶅啓鎴栬呰鐩杛un()鏂规硶锛岃屽浜庡悓姝ョ殑瀹炵幇鏂规硶涓...
  • java 澶氱嚎绋嬫湁鍑犵瀹炵幇鏂规硶
    绛旓細1銆佺户鎵縏hread绫诲疄鐜板绾跨▼ 缁ф壙Thread绫荤殑鏂规硶灏界琚垜鍒椾负涓绉嶅绾跨▼瀹炵幇鏂瑰紡锛屼絾Thread鏈川涓婁篃鏄疄鐜颁簡Runnable鎺ュ彛鐨勪竴涓疄渚嬶紝瀹冧唬琛ㄤ竴涓嚎绋嬬殑瀹炰緥锛屽苟涓旓紝鍚姩绾跨▼鐨勫敮涓鏂规硶灏辨槸閫氳繃Thread绫荤殑start()瀹炰緥鏂规硶銆俿tart()鏂规硶鏄竴涓猲ative鏂规硶锛屽畠灏嗗惎鍔ㄤ竴涓柊绾跨▼锛屽苟鎵цrun()鏂规硶銆傝繖绉嶆柟寮忓疄鐜板...
  • 澶氱嚎绋嬫湁鍝簺瀹炵幇鏂瑰紡?
    绛旓細java澶氱嚎绋嬬殑鍑犵瀹炵幇鏂瑰紡锛1.缁ф壙Thread绫伙紝閲嶅啓run鏂规硶 2.瀹炵幇Runnable鎺ュ彛锛岄噸鍐檙un鏂规硶锛屽疄鐜癛unnable鎺ュ彛鐨勫疄鐜扮被鐨勫疄渚嬪璞′綔涓篢hread鏋勯犲嚱鏁扮殑target 3.閫氳繃Callable鍜孎utureTask鍒涘缓绾跨▼ 4.閫氳繃绾跨▼姹犲垱寤虹嚎绋 锛堜笂涓绡囧凡缁忚杩囦簡锛夊墠闈涓ょ鍙互褰掔粨涓轰竴绫伙細鏃犺繑鍥炲硷紝鍘熷洜寰堢畝鍗曪紝閫氳繃閲嶅啓run鏂规硶锛...
  • Thread鐨勪娇鐢ㄨ鏄
    绛旓細Java褰撲腑瀹炵幇澶氱嚎绋嬬殑鏂规硶涓昏鏈変袱绉嶆柟寮锛氶泦鎴怲hread绫诲拰瀹炵幇Runnable鎺ュ彛瀹氫箟绾跨▼鐨勮繍琛屾椂琛屼负锛屾湰鏂囩畝鍗曚粙缁嶄竴涓婽hread鐨勭畝鍗曚娇鐢 锛1锛 瀹氫箟 Thread锛Java涓疄鐜绾跨▼鐨勫叿浣撶被锛屽皝瑁呬簡鎵鏈夌殑绾跨▼鎿嶄綔锛岄氳繃Thread瀹炰緥鏉ユ帶鍒剁嚎绋嬭涓(杩愯锛屽仠姝) 锛2锛変綔鐢 瀹炵幇澶氱嚎绋 锛3锛変紭鐐 瀹炵幇绠鍗 ...
  • Java涓Runnable鍜孴hread鐨勫尯鍒
    绛旓細Runnable鎺ュ彛鍜孴hread绫绘槸java涓疄鐜板绾跨▼鐨勪袱绉嶆柟娉銆備富瑕佸尯鍒湪浜庯細Thread鏄被锛岃孯unnable鏄帴鍙c傛娊璞$被鍜屾帴鍙g殑鍖哄埆濡備笅锛1. 鍦ㄧ被鏉ョ户鎵挎娊璞$被鏃讹紝鍙渶瀹炵幇閮ㄥ垎鍏蜂綋鏂规硶鍜屽叏閮ㄦ娊璞℃柟娉曪紝鑰屽疄鐜版帴鍙e垯瑕佸疄鐜伴噷闈㈢殑鍏ㄩ儴鏂规硶銆2. 鍦ㄦ帴鍙d腑鏃犳垚鍛樺彉閲忥紝鑰屾娊璞$被涓彲鏈夋垚鍛樺彉閲忋傚湪Java涓紩杩涙帴鍙d富瑕佹槸...
  • Java璇█:Java澶氱嚎绋鎬庢牱鍒涘缓
    绛旓細Java鎻愪緵浜嗙嚎绋嬬被Thread鏉ュ垱寤澶氱嚎绋嬬殑绋嬪簭銆傚叾瀹烇紝鍒涘缓绾跨▼涓庡垱寤烘櫘閫氱殑绫荤殑瀵硅薄鐨勬搷浣滄槸涓鏍风殑锛岃岀嚎绋嬪氨鏄疶hread绫绘垨鍏跺瓙绫荤殑瀹炰緥瀵硅薄銆傛瘡涓猅hread瀵硅薄鎻忚堪浜嗕竴涓崟鐙殑绾跨▼銆傝浜х敓涓涓嚎绋嬶紝鏈変袱绉嶆柟娉锛氶渶瑕佷粠Java.lang.Thread绫绘淳鐢熶竴涓柊鐨勭嚎绋嬬被锛岄噸杞藉畠鐨剅un()鏂规硶锛瀹炵幇Runnalbe鎺ュ彛锛岄噸杞絉un...
  • 濡備綍鍦java绋嬪簭涓瀹炵幇澶氱嚎绋?浣跨敤Thread瀛愮被鍜屽疄鐜 Runnable鍊熷彛涓ょ鏂规硶...
    绛旓細绗竴绉嶏細缁ф壙Thread绫伙紝閫氳繃缂栧啓绾跨▼缁ф壙thread绫伙紝閲嶅啓run锛堬級鏂规硶鏉瀹炵幇绾跨▼锛岃繖涓被鏄湪java.lang鍖呬腑瀹氫箟鐨勶紝浣嗘槸涓涓被鍙兘缁ф壙涓涓埗绫伙紝杩欎釜鏂规硶鏈夎繖涓眬闄愩傜浜岀锛氱洿鎺ュ疄鐜癛unnable澶氱嚎绋鎺ュ彛锛孯unnable鍙湁涓涓娊璞℃柟娉時un 锛屽苟娌℃湁start锛堬級鏂规硶锛屼篃灏辨槸璇磋閫氳繃Thread绫绘潵鍚姩Runnable瀹炵幇鐨澶...
  • Java澶氱嚎绋鍜屽崟绾跨▼鎬庝箞閫氫織鏄撴噦鐨勭悊瑙?
    绛旓細Java鐨鏍稿績鐗规т箣涓灏辨槸鏀寔澶氱嚎绋嬶紝绾跨▼鏄▼搴忔墽琛岀殑鍩烘湰鍗曞厓锛屾瘡涓嚎绋嬮兘鏈夎嚜宸辩殑鏍堢┖闂达紝铏界劧鍙互鍏变韩绋嬪簭鐨勫叏灞璧勬簮锛屼絾姣忎釜绾跨▼鐨鎵ц鏄嫭绔嬬殑銆傝瀹炵幇澶氱嚎绋锛屼綘鍙互閫夋嫨缁ф壙Thread绫绘垨鑰呭疄鐜癛unnable鎺ュ彛銆傚墠鑰呴傜敤浜庣畝鍗曟墿灞曪紝鑰屽悗鑰呭垯閬垮厤浜咼ava鍗曠户鎵跨殑闄愬埗锛屼絾璁捐涓婄◢鏄惧鏉傘傚垱寤Java绾跨▼鏈涓夌鏂...
  • 澶氱嚎绋,鍚屾鐨瀹炵幇,wait鍜宻leep鐨勪笉鍚
    绛旓細澶氱嚎绋嬫湁涓ょ瀹炵幇鏂瑰紡:鍒嗗埆鏄户鎵縏hread绫诲拰瀹炵幇Runnable鎺ュ彛銆傚悓姝ョ殑瀹炵幇鏂瑰紡鏈変袱绉:synchronized,wait涓巒otify銆侾ublic static synchronized void test(){} Public Void test1(){synchronized clock{}} 鍦Java涓wait鍜宻leep鏂规硶鐨勪笉鍚:鏈澶х殑涓嶅悓鏄湪绛夊緟鏃秝ait浼氶噴鏀鹃攣,鑰宻leep浼氫竴鐩村彧鏈夐攣銆倃ait閫氬父琚...
  • 扩展阅读:同步有几种实现方法 ... 线程同步的3种方法 ... 多线程同步的方法 ... 多线程实现的四种方式 ... java线程同步方法 ... 线程间同步的几种方法 ... 多线程几种方法 ... 实现线程同步的方法 ... 线程同步有几种方法 ...

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