一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 詳解多線(xiàn)程及Runable 和Thread的區(qū)別

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

2021-07-30 10:59qq_43499096 Java教程

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

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

thread和runnable區(qū)別

執(zhí)行多線(xiàn)程操作可以選擇
繼承thread類(lèi)
實(shí)現(xiàn)runnable接口

1.繼承thread類(lèi)

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)象的原因就是:

?
1
2
3
4
5
6
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è)線(xiàn)程都執(zhí)行了5次循環(huán)操作。

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

同樣的例子,代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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張票。
原因在于:

?
1
2
3
4
5
6
7
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線(xiàn)程都以同一個(gè)myrunnabletest來(lái)啟動(dòng),所以他們的資源是共享的。

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

原文鏈接:https://blog.csdn.net/qq_43499096/article/details/89048216

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 希望影院高清免费观看视频 | 国产精品亚洲综合久久 | 手机在线观看网站免费视频 | 久久久久久久久a免费 | 亚洲成人在线播放 | 欧美整片在线 | 动漫女性扒开尿口羞羞漫画 | 青青热久免费精品视频网站 | 午夜AV内射一区二区三区红桃视 | 69日本人xxxxxxxx色 | 欧美日韩国产手机在线观看视频 | 性鸥美 | 国内自拍成人网在线视频 | 成人福利在线播放 | 欧美精品99久久久久久人 | 国产日韩欧美在线播放 | 亚洲免费视频在线 | 91大神精品 | 被黑人同学彻底征服全文小说阅读 | 成人国产午夜在线视频 | 欧美又大又粗又爽视频 | 美国video | 日本卡一卡2卡3卡4精品卡无人区 | 亚洲欧洲日产国码 最新 | 欧美日韩精彩视频 | 五月桃花网婷婷亚洲综合 | 国内久久精品 | 国产精品成人免费 | 国产亚洲一欧美一区二区三区 | 国产剧情麻豆刘玥视频 | 四虎在线成人免费网站 | 深夜a| 日本黄色录像视频 | 黄篇网站在线观看 | 91精品国产91热久久p | 人妖欧美一区二区三区四区 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 色哟哟观看| 热伊人99re久久精品最新地 | 男女做污事| 国产男女性特黄录像 |