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

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

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

Thread和Runnable區(qū)別

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

1.繼承Thread類

以賣票窗口舉例,一共5張票,由3個(gè)窗口進(jìn)行售賣(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é)果一共賣出了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é)果賣出了預(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ì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

简阳市| 上高县| 南平市| 漳州市| 儋州市| 襄城县| 龙里县| 高雄县| 河津市| 岳阳县| 山阳县| 拜城县| 兴隆县| 南和县| 高淳县| 林甸县| 吴忠市| 梅州市| 崇明县| 额敏县| 峨眉山市| 怀仁县| 建湖县| 临猗县| 宁武县| 晋中市| 恭城| 大庆市| 石城县| 徐汇区| 嫩江县| 阜阳市| 德兴市| 辉南县| 井陉县| 开远市| 鹤峰县| 吉林市| 万源市| 许昌县| 策勒县|