JAVA多线程编程的几种表示方法 多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么...

java\u591a\u7ebf\u7a0b\u90fd\u6709\u51e0\u79cd\u65b9\u5f0f\u5b9e\u73b0\uff1f\uff1f

\u6709\u4e09\u79cd\uff1a
(1)\u7ee7\u627fThread\u7c7b\uff0c\u91cd\u5199run\u51fd\u6570
\u521b\u5efa\uff1a
class xx extends Thread{
public void run(){
Thread.sleep(1000)//\u7ebf\u7a0b\u4f11\u77201000\u6beb\u79d2\uff0csleep\u4f7f\u7ebf\u7a0b\u8fdb\u5165Block\u72b6\u6001\uff0c\u5e76\u91ca\u653e\u8d44\u6e90
}}
\u5f00\u542f\u7ebf\u7a0b\uff1a
\u5bf9\u8c61.start()//\u542f\u52a8\u7ebf\u7a0b\uff0crun\u51fd\u6570\u8fd0\u884c
(2)\u5b9e\u73b0Runnable\u63a5\u53e3\uff0c\u91cd\u5199run\u51fd\u6570
\u5f00\u542f\u7ebf\u7a0b\uff1a
Thread t = new Thread(\u5bf9\u8c61)//\u521b\u5efa\u7ebf\u7a0b\u5bf9\u8c61
t.start()
(3)\u5b9e\u73b0Callable\u63a5\u53e3\uff0c\u91cd\u5199call\u51fd\u6570
Callable\u662f\u7c7b\u4f3c\u4e8eRunnable\u7684\u63a5\u53e3\uff0c\u5b9e\u73b0Callable\u63a5\u53e3\u7684\u7c7b\u548c\u5b9e\u73b0Runnable\u7684\u7c7b\u90fd\u662f\u53ef\u88ab\u5176\u5b83\u7ebf\u7a0b\u6267\u884c\u7684\u4efb\u52a1\u3002
Callable\u548cRunnable\u6709\u51e0\u70b9\u4e0d\u540c:
\u2460Callable\u89c4\u5b9a\u7684\u65b9\u6cd5\u662fcall()\uff0c\u800cRunnable\u89c4\u5b9a\u7684\u65b9\u6cd5\u662frun().
\u2461Callable\u7684\u4efb\u52a1\u6267\u884c\u540e\u53ef\u8fd4\u56de\u503c\uff0c\u800cRunnable\u7684\u4efb\u52a1\u662f\u4e0d\u80fd\u8fd4\u56de\u503c\u7684
\u2462call()\u65b9\u6cd5\u53ef\u629b\u51fa\u5f02\u5e38\uff0c\u800crun()\u65b9\u6cd5\u662f\u4e0d\u80fd\u629b\u51fa\u5f02\u5e38\u7684\u3002
\u2463\u8fd0\u884cCallable\u4efb\u52a1\u53ef\u62ff\u5230\u4e00\u4e2aFuture\u5bf9\u8c61\uff0cFuture\u8868\u793a\u5f02\u6b65\u8ba1\u7b97\u7684\u7ed3\u679c\u3002\u5b83\u63d0\u4f9b\u4e86\u68c0\u67e5\u8ba1\u7b97\u662f\u5426\u5b8c\u6210\u7684\u65b9\u6cd5,\u4ee5\u7b49
\u5f85\u8ba1\u7b97\u7684\u5b8c\u6210,\u5e76\u68c0\u7d22\u8ba1\u7b97\u7684\u7ed3\u679c.\u901a\u8fc7Future\u5bf9\u8c61\u53ef\u4e86\u89e3\u4efb\u52a1\u6267\u884c\u60c5\u51b5,\u53ef\u53d6\u6d88\u4efb\u52a1\u7684\u6267\u884c,\u8fd8\u53ef\u83b7\u53d6\u4efb\u52a1\u6267\u884c\u7684\u7ed3\u679c

\u591a\u7ebf\u7a0b\u67093\u79cd\u5b9e\u73b0\u65b9\u6cd5 \u7ee7\u627fThread \u7c7b\u3001\u5b9e\u73b0Runnable \u63a5\u53e3\u548c\u521b\u5efa\u7ebf\u7a0b\u6c60\uff08JDK1.5\u4e4b\u540e\u624d\u6709\u7684\uff09\u5b9e\u73b0\u591a\u7ebf\u7a0b
synchronized,wait\u4e0enotify \u53ef\u4ee5\u5b9e\u73b0\u540c\u6b65 \u5176\u5b9e\u8fd8\u6709\u5f88\u591a\u53ef\u4ee5\u5b9e\u73b0\u540c\u6b65\u7684\u65b9\u6cd5 \u8fd9\u4e2a\u5c31\u9700\u8981\u7ecf\u9a8c\u7684\u79ef\u7d2f\u4e86

创建线程有两种方法:继承Thread类和实现Runnable接口。

方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:
public class MyThread extends Thread {
int count= 1, number;
public MyThread(int num) {
number = num;
System.out.println("创建线程 " + number);
}
public void run() {
while(true) {
System.out.println("线程 " + number + ":计数 " + count);
if(++count== 6) return;
}
}
public static void main(String args[]) {
for(int i = 0; i < 5; i++) new MyThread(i+1).start();
}
}

方法二:实现 Runnable 接口
Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。下面是一个例子:
public class MyThread implements Runnable {
int count= 1, number;
public MyThread(int num) {
number = num;
System.out.println("创建线程 " + number);
}
public void run() {
while(true) {
System.out.println("线程 " + number + ":计数 " + count);
if(++count== 6) return;
}
}
public static void main(String args[]) {
for(int i = 0; i < 5; i++) new Thread(new MyThread(i+1)).start();
}
}
两种方法各有千秋,可以灵活运用。

  • JAVA澶氱嚎绋嬬紪绋嬬殑鍑犵琛ㄧず鏂规硶
    绛旓細鍒涘缓绾跨▼鏈変袱绉嶆柟娉曪細缁ф壙Thread绫诲拰瀹炵幇Runnable鎺ュ彛銆傛柟娉曚竴锛氱户鎵 Thread 绫伙紝瑕嗙洊鏂规硶 run()锛屾垜浠湪鍒涘缓鐨 Thread 绫荤殑瀛愮被涓噸鍐 run() ,鍔犲叆绾跨▼鎵瑕佹墽琛岀殑浠g爜鍗冲彲銆備笅闈㈡槸涓涓緥瀛愶細public class MyThread extends Thread { int count= 1, number;public MyThread(int num) { number = num...
  • java澶氱嚎绋嬫湁鍑犵瀹炵幇鏂规硶
    绛旓細澶氱嚎绋嬫湁4绉嶅疄鐜版柟娉锛屽垎鍒槸缁ф壙Thread绫汇佸疄鐜癛unnable鎺ュ彛銆佸疄鐜癈allable鎺ュ彛閫氳繃FutureTask鍖呰鍣ㄦ潵鍒涘缓Thread绾跨▼銆佷娇鐢‥xecutorService銆丆allable銆丗uture瀹炵幇鏈夎繑鍥炵粨鏋滅殑澶氱嚎绋嬨俆hread绫绘湰璐ㄤ笂鏄疄鐜颁簡Runnable鎺ュ彛鐨勪竴涓疄渚嬶紝浠h〃涓涓嚎绋嬬殑瀹炰緥銆傚惎鍔ㄧ嚎绋嬬殑鍞竴鏂规硶灏辨槸閫氳繃Thread绫荤殑start()瀹炰緥鏂规硶銆俿tart...
  • 鍦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澶氱嚎绋嬫湁鍑犵瀹炵幇鏂规硶
    绛旓細java澶氱嚎绋鐨勫惎鍔ㄩ『搴忎笉涓瀹氭槸绾跨▼鎵ц鐨勯『搴忥紝鍚勪釜绾跨▼涔嬮棿鏄姠鍗燙PU璧勬簮鎵ц鐨勶紝鎵鏈夋湁鍙兘鍑虹幇涓庡惎鍔ㄩ『搴忎笉涓鑷寸殑鎯呭喌銆侰PU鐨勮皟鐢ㄧ瓥鐣ワ細濡備綍浣跨敤CPU璧勬簮鏄敱鎿嶄綔绯荤粺鏉ュ喅瀹氱殑锛屼絾鎿嶄綔绯荤粺鍙兘鍐冲畾CPU鐨勪娇鐢ㄧ瓥鐣ヤ笉鑳芥帶鍒跺疄闄呰幏寰桟PU鎵ц鏉冪殑绋嬪簭銆傜嚎绋嬫墽琛鏈変袱绉鏂瑰紡锛1.鎶㈠崰寮忥細鐩墠PC鏈轰腑浣跨敤鏈澶氱殑涓绉...
  • java澶氱嚎绋嬫湁鍑犵瀹炵幇鏂规硶,閮芥槸浠涔?鍚屾鏈夊嚑绉嶅疄鐜版柟娉,閮芥槸浠涔...
    绛旓細java涓澶氱嚎绋鐨勫疄鐜版柟娉鏈変袱绉锛1.鐩存帴缁ф壙thread绫伙紱2.瀹炵幇runnable鎺ュ彛锛涘悓姝ョ殑瀹炵幇鏂规硶鏈変簲绉嶏細1.鍚屾鏂规硶锛2.鍚屾浠g爜鍧楋紱3.浣跨敤鐗规畩鍩熷彉閲(volatile)瀹炵幇绾跨▼鍚屾锛4.浣跨敤閲嶅叆閿佸疄鐜扮嚎绋嬪悓姝ワ紱5.浣跨敤灞閮ㄥ彉閲忓疄鐜扮嚎绋嬪悓姝 銆傚叾涓绾跨▼瀹炵幇杩囩▼涓渶娉ㄦ剰閲嶅啓鎴栬呰鐩杛un()鏂规硶锛岃屽浜庡悓姝ョ殑瀹炵幇鏂规硶涓...
  • java澶氱嚎绋閮鏈夊嚑绉鏂瑰紡瀹炵幇??
    绛旓細鏈変笁绉锛(1)缁ф壙Thread绫伙紝閲嶅啓run鍑芥暟 鍒涘缓锛歝lass xx extends Thread{ public void run(){ Thread.sleep(1000)//绾跨▼浼戠湢1000姣锛宻leep浣跨嚎绋嬭繘鍏lock鐘舵侊紝骞堕噴鏀捐祫婧 }} 寮鍚嚎绋嬶細瀵硅薄.start()//鍚姩绾跨▼锛宺un鍑芥暟杩愯 (2)瀹炵幇Runnable鎺ュ彛锛岄噸鍐檙un鍑芥暟 寮鍚嚎绋嬶細Thread t = new Thread(...
  • 鍦Java 涓澶氱嚎绋嬬殑瀹炵幇鏂规硶鏈鍝簺,濡備綍浣跨敤
    绛旓細Java澶氱嚎绋嬬殑鍒涘缓鍙婂惎鍔 Java涓嚎绋嬬殑鍒涘缓甯歌鏈夊涓夌鍩烘湰褰㈠紡 1.缁ф壙Thread绫,閲嶅啓璇ョ被鐨剅un()鏂规硶銆 澶嶅埗浠g爜 1 class MyThread extends Thread { 2 3 private int i = 0; 4 5 @Override 6 public void run() { 7 for (i = 0; i < 100; i++) { 8 System.out.println(Thread.currentThrea...
  • 鍦澶氱嚎绋嬬紪绋涓,绾跨▼鐨勬墽琛屾柟寮忛氬父鏄
    绛旓細鍥涚澶氱嚎绋瀹炵幇鏂瑰紡锛1. Thread瑁哥嚎绋 绾跨▼鏄苟鍙戠殑鍩烘湰鍗曞厓锛屾瘡涓嚎绋嬪璞″搴旂潃涓涓绠楁満搴曞眰绾跨▼銆傜嚎绋嬫湁鑷繁鐨勬爤绌洪棿锛屽崰鐢↗VM杩涚▼绌洪棿鐨勬寚瀹氶儴鍒嗐傞氳繃鎻愪緵Runnable骞惰皟鐢╯tart寮濮嬫墽琛岋紝娌℃湁鐜版垚鐨凙PI鏉ョ粨鏉熺嚎绋嬶紝闇瑕佽嚜宸卞疄鐜般傝繖绉嶆柟寮忎紭鐐规槸鎺ヨ繎鎿嶄綔绯荤粺/纭欢妯″瀷鐨勫苟鍙戣绠楋紝浣嗗垱寤虹嚎绋嬮渶瑕佽楄垂澶ч噺鍐呭瓨...
  • java澶氱嚎绋嬫湁鍑犵瀹炵幇鏂规硶,閮芥槸浠涔?鍚屾鏈夊嚑绉嶅疄鐜版柟娉,閮芥槸浠涔...
    绛旓細澶氱嚎绋嬫湁涓ょ瀹炵幇鏂规硶锛屽垎鍒槸缁ф壙Thread绫讳笌瀹炵幇Runnable鎺ュ彛 鍚屾鐨勫疄鐜版柟闈㈡湁涓ょ锛屽垎鍒槸synchronized,wait涓巒otify
  • 扩展阅读:初学编程必背50个 ... java多线程经典实例 ... java编程零基础入门 ... 线程间同步的几种方法 ... 多线程几种方法 ... c#多线程编程 ... java多线程编程实例 ... 多线程经典例子 ... 现在多线程都用哪种方式 ...

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