最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解多線程及Runable 和Thread的區(qū)別

 更新時(shí)間:2019年04月08日 15:50:18   作者:qq_43499096  
這篇文章主要介紹了多線程及Runable 和Thread的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Thread和Runnable區(qū)別

執(zhí)行多線程操作可以選擇
繼承Thread類
實(shí)現(xiàn)Runnable接口

1.繼承Thread類

以賣(mài)票窗口舉例,一共5張票,由3個(gè)窗口進(jìn)行售賣(mài)(3個(gè)線程)。
代碼:

package thread;
public class ThreadTest {
	public static void main(String[] args) {
		MyThreadTest mt1 = new MyThreadTest("窗口1");
		MyThreadTest mt2 = new MyThreadTest("窗口2");
		MyThreadTest mt3 = new MyThreadTest("窗口3");
		mt1.start();
		mt2.start();
		mt3.start();
	}
}
class MyThreadTest extends Thread{
	private int ticket = 5;  
	private String name;
	public MyThreadTest(String name){
		this.name = name;
	}
  public void run(){  
     while(true){ 
       if(ticket < 1){  
        break; 
       }  
       System.out.println(name + " = " + ticket--);  
     }  
  } 
}

執(zhí)行結(jié)果:
窗口1 = 5
窗口1 = 4
窗口1 = 3
窗口1 = 2
窗口1 = 1
窗口2 = 5
窗口3 = 5
窗口2 = 4
窗口3 = 4
窗口3 = 3
窗口3 = 2
窗口3 = 1
窗口2 = 3
窗口2 = 2
窗口2 = 1
結(jié)果一共賣(mài)出了5*3=15張票,這違背了"5張票"的初衷。
造成此現(xiàn)象的原因就是:

MyThreadTest mt1 = new MyThreadTest("窗口1");
	MyThreadTest mt2 = new MyThreadTest("窗口2");
	MyThreadTest mt3 = new MyThreadTest("窗口3");
	mt1.start();
	mt2.start();
	mt3.start();

一共創(chuàng)建了3個(gè)MyThreadTest對(duì)象,而這3個(gè)對(duì)象的資源不是共享的,即各自定義的ticket=5是不會(huì)共享的,因此3個(gè)線程都執(zhí)行了5次循環(huán)操作。

2.實(shí)現(xiàn)Runnable接口

同樣的例子,代碼:

package thread;
public class RunnableTest {
	public static void main(String[] args) {
		MyRunnableTest mt = new MyRunnableTest();
		Thread mt1 = new Thread(mt,"窗口1");
		Thread mt2 = new Thread(mt,"窗口2");
		Thread mt3 = new Thread(mt,"窗口3");
		mt1.start();
		mt2.start();
		mt3.start();
	}
}
class MyRunnableTest implements Runnable{
	private int ticket = 5;  
	public void run(){  
     while(true){ 
  		 if(ticket < 1){  
  			 break; 
  		 }  
  		 System.out.println(Thread.currentThread().getName() + " = " + ticket--);  
     }  
  } 
}

結(jié)果:

窗口1 = 5
窗口1 = 2
窗口3 = 4
窗口2 = 3
窗口1 = 1

結(jié)果賣(mài)出了預(yù)期的5張票。
原因在于:

MyRunnableTest mt = new MyRunnableTest();
Thread mt1 = new Thread(mt,"窗口1");
Thread mt2 = new Thread(mt,"窗口2");
Thread mt3 = new Thread(mt,"窗口3");
mt1.start();
mt2.start();
mt3.start();

只創(chuàng)建了一個(gè)MyRunnableTest對(duì)象,而3個(gè)Thread線程都以同一個(gè)MyRunnableTest來(lái)啟動(dòng),所以他們的資源是共享的。

以上所述是小編給大家介紹的多線程及Runable 和Thread的區(qū)別詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

惠来县| 罗定市| 舒城县| 凤庆县| 福安市| 安乡县| 普安县| 广平县| 谷城县| 英德市| 陇川县| 吴旗县| 静海县| 黄大仙区| 永修县| 株洲县| 荣昌县| 靖远县| 沽源县| 紫云| 文山县| 定结县| 固安县| 当雄县| 益阳市| 宜兴市| 司法| 潞城市| 安平县| 安宁市| 绵阳市| 黑河市| 扎囊县| 巴东县| 静海县| 德江县| 石楼县| 米易县| 定兴县| 靖西县| 静海县|