亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java筆記五:多線程的使用

2019-11-17 03:27:34
字體:
來源:轉載
供稿:網友

  以前學習基礎的時候學習了一段時間的多線程,上課的時候老師也講過一遍,那時候感覺學的似懂非懂。因為到現在很長一段時間沒有用到多線程的知識,所以現在基本上忘了差不多了。但是下個星期要面試了,所以今天特意又研究了一下多線程,免得被問到多線程問題時什么都不記得了那就麻煩了。現在對java比較熟悉了,所以再一次學習多線程知識,感覺沒有那么難了(記得剛接觸多線程的時候,感覺非常吃力)。

  首先講一下進程和線程的區別:

    進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。

    線程:同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器(PC),線程切換開銷小。

    線程和進程一樣分為五個階段:創建、就緒、運行、阻塞、終止。

    多進程是指操作系統能同時運行多個任務(程序)。

    多線程是指在同一程序中有多個順序流在執行。

  在java中創建一個線程有兩種方法:

   ?、賹崿Fjava.lang.Runnable接口,重寫run()方法,啟動:new Thread(this).start()。

復制代碼
 1 package com.thread; 2  3 public class ThreadTest1 { 4     public static void main(String[] args) { 5         Runnable1 r = new Runnable1(); 6         //r.run();并不是線程開啟,而是簡單的方法調用 7         Thread t = new Thread(r);//創建線程 8         //t.run(); //如果該線程是使用獨立的 Runnable 運行對象構造的,則調用該 Runnable 對象的 run 方法;否則,該方法不執行任何操作并返回。 9         t.start(); //線程開啟10         for (int i = 0; i < 100; i++) {11             System.out.i);12         }13     }14 }15 class Runnable1 implements Runnable{16     public void run() {17         for (int i = 0; i < 100; i++) {18             System.out.println("Thread-----:"+i);19         }20     }21 }
復制代碼

  要注意的是:

    1.r.run()并不是啟動線程,而是簡單的方法調用。

    2.Thread也有run()方法,如果該線程是使用獨立的 Runnable 運行對象構造的,則調用該 Runnable 對象的 run 方法;否則,該方法不執行任何操作并返回。

    3.并不是一啟動線程(調用start()方法)就執行這個線程,而是進入就緒狀態,什么時候運行要看CUP。

   ?、诶^承java.lang.Thread類,重寫run()方法。

復制代碼
 1 package com.thread; 2  3 public class TestThread2 { 4     public static void main(String[] args) { 5         Thread1 t = new Thread1(); 6         //t.run(); //這里也不能直接調用方法 7         t.start(); 8         for (int i = 0; i < 100; i++) { 9             System.out.println("main:"+i);10         }11     }12 }13 14 //盡量使用實現Runnnable接口,因為接口比較靈活15 class Thread1 extends Thread{16     @Override17     public void run() {18         for (int i = 0; i < 100; i++) {19             System.out.println("Thread-----:"+i);20         }21     }22 }
復制代碼

雖然兩種方法都可行,但是最好還是用第一種方法,因為使用接口靈活性好,java中時單繼承、多實現。

Thread類中常用的方法有:

 ?、賡leep(long millis): 在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。

復制代碼
 1 package com.thread; 2 import java.util.Date; 3 /** 4  * sleep()指在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。 5  * @author Administrator 6  * 7  */ 8 public class SleepTest { 9     public static void main(String[] args) {10         Thread2 t = new Thread2();11         t.start();12         try {13             Thread.sleep(10000); //主線程睡眠10秒鐘14         } catch (InterruptedException e) {15             e.printStackTrace();16         }17         //主線程睡眠10秒鐘后結束t線程18         //t.interrupt(); //這種結束方式比較粗暴,如果t線程打開了某個資源還沒來得及關閉也就是run方法還沒有執行完就強制結束線程,會導致資源無法關閉19         //t.stop();也是結束某個線程,這種方式比interrupt()更粗暴20         t.flag = false;21     }22 }23 class Thread2 extends Thread{24     boolean flag = true; //用這種方式結束線程很不錯,用一個變量控制run方法什么時候不再執行,不會出現run方法沒有執行完畢就結束25     @Override26     public void run() { //run方法一結束,整個線程就終止了27         while(flag){28             System.out.println("---"+new Date()+"---");29             try {30                 sleep(1000);31             } catch (InterruptedException e) {32                 return;33             }34         }35     }36 }
復制代碼

 

 ?、趈oin():指等待t線程終止。也可以理解為將t線程合并到當前線程來,等待t線程結束后再往下執行。相當于方法調用

復制代碼
 1 package com.thread; 2  3 import java.util.Date; 4  5 /* 6  * t.join()方法指等待t線程終止。也可以理解為將t線程合并到當前線程來,等待t線程結束后再往下執行。相當于方法調用 7  */ 8 public class TestJoin { 9     public static void main(String[] args) {10         Thread t = new Thread3("abc");11         t.start();12         for (int i = 0; i < 20; i++) {13             System.out.println("我是main線程");14             if(i==10){15                 try {16                     t.join();17                 } catch (InterruptedException e1) {18                     // TODO Auto-generated catch block19                     e1.printStackTrace();20                 }21             }22             try {23                 Thread.sleep(1000);24             } catch (InterruptedException e) {25                 e.printStackTrace();26             }27         }28     }29 }30 class Thread3 extends Thread{31     public Thread3(String s) { //給該線程取一個名字,用getName()方法可以去到該名字32         super(s);33     }34     @Override35     public void run() {36         for (int i = 0; i < 20; i++) {37             System.out.println("我是"+getName()+"線程");38             try {39                 sleep(1000);40             } catch (InterruptedException e) {41                 e.printStackTrace();42             }43         }44     }45 }
復制代碼

運行該程序結果為:

復制代碼
 1 我是main線程 2 我是abc線程 3 我是main線程 4 我是abc線程 5 我是main線程 6 我是abc線程 7 我是main線程 8 我是abc線程 9 我是main線程10 我是abc線程11 我是main線程12 我是abc線程13 我是main線程14 我是abc線程15 我是main線程16 我是abc線程17 我是main線程18 我是abc線程19 我是main線程20 我是abc線程21 我是main線程22 我是abc線程23 我是abc線程24 我是abc線程25 我是abc線程26 我是abc線程27 我是abc線程28 我是abc線程29 我是abc線程30 我是abc線程31 我是abc線程32 我是main線程33 我是main線程34 我是main線程35 我是main線程36 我是main線程37 我是main線程38 我是main線程39 我是main線程40 我是main線程
復制代碼

可以看到從第22行起就開始順序執行了,因為i=10的時候就將該形成合并了。

 ?、踶ield():暫停當前正在執行的線程對象,并執行其他線程。

 ?、躶etPriority(): 更改線程的優先級。

    MIN_PRIORITY = 1
       NORM_PRIORITY = 5
           MAX_PRIORITY = 10

復制代碼
 1 package com.thread; 2  3  4 /*t.yield()暫停當前正在執行的線程對象,并執行其他線程。 5  *  6  * MIN_PRIORITY 1 7  * NORM_PRIORITY 5 8  * MAX_PRIORITY 10 9  */10 public class TestYield {11     public static void main(String[] args) {12         Thread4 t1 = new Thread4("t1");13         Thread4 t2 = new Thread4("t2");14         t1.setPriority(Thread.MAX_PRIORITY);15         t2.setPriority(Thread.MIN_PRIORITY);16         System.out.println(t1.getPriority());17         System.out.println(t2.getPriority());18         t1.start();19         t2.start();20         21     }22 }23 class Thread4 extends Thread{24     public Thread4(String s) { 25         super(s);26     }27     @Override28     public void run() {29         for (int i = 0; i < 1000; i++) {30             System.out.println("我是"+getName()+"線程"+i);31             if(i%10 == 0){32                 yield();33             }34         }35     }36 }
復制代碼

由于運行結果太長就沒有貼上來了,運行該程序,可以看到t1和t2兩個進程每次當i為10的倍數時都會讓給其他線程執行。

  ⑤interrupt():中斷某個線程,這種結束方式比較粗暴,如果t線程打開了某個資源還沒來得及關閉也就是run方法還沒有執行完就強制結束線程,會導致資源無法關閉

  要想結束進程最好的辦法就是用sleep()函數的例子程序里那樣,在線程類里面用以個boolean型變量來控制run()方法什么時候結束,run()方法一結束,該線程也就結束了。

 ?、捱€有很多的方法就不一一列舉了.........

  

  當然,多線程難點不在這些,多線程的難點在于多線程之間的協調。關于多線程的協調待續....


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情一区二区三区高清视频| 久久精品一区中文字幕| 亚洲欧美国产一本综合首页| 国产大片精品免费永久看nba| 久久久欧美精品| 欧美黑人性生活视频| 国产精品999| 成人黄色大片在线免费观看| 亚洲欧美国产精品| 97在线视频免费播放| 亚洲人成网站999久久久综合| 色偷偷91综合久久噜噜| 欧美午夜视频一区二区| 理论片在线不卡免费观看| 亚洲免费一级电影| 亚洲国产精品嫩草影院久久| 欧美视频精品一区| 成人网在线观看| 日韩精品在线私人| 青青在线视频一区二区三区| 国产丝袜精品视频| 狠狠躁夜夜躁久久躁别揉| 日本久久久a级免费| 亚洲午夜精品视频| 久久99久久99精品中文字幕| 国产欧美一区二区三区久久| 成人h片在线播放免费网站| 色婷婷亚洲mv天堂mv在影片| 在线激情影院一区| 亚洲午夜av久久乱码| 欧美激情视频三区| 欧美高清激情视频| 亚洲精品成人久久| 亚洲精品日韩在线| 午夜精品一区二区三区在线播放| 一区二区三区国产在线观看| 亚洲天堂影视av| 国产精品老女人精品视频| 国产精品三级网站| 日韩精品极品毛片系列视频| 欧美精品一区二区三区国产精品| 久久手机精品视频| 中文字幕日韩欧美精品在线观看| 欧美一级淫片丝袜脚交| 亚洲iv一区二区三区| 亚洲999一在线观看www| 日韩综合视频在线观看| 久久久久久97| 国产综合香蕉五月婷在线| 国产精品美女www| 538国产精品视频一区二区| 久久久久国产一区二区三区| 亚洲一区国产精品| 久久久久久97| 亚洲国产精品久久| 国模精品视频一区二区三区| 亚洲人成网站777色婷婷| 久久久精品国产| 久久久精品在线观看| 欧美一区二区三区免费观看| **欧美日韩vr在线| 久久视频在线看| 国产精品极品美女粉嫩高清在线| 欧美激情视频一区二区三区不卡| 亚洲人成免费电影| 午夜精品久久久久久99热软件| 国外日韩电影在线观看| 国产欧美日韩精品专区| 亚洲女人天堂视频| 欧美性黄网官网| 92看片淫黄大片看国产片| 成人免费在线网址| 久久网福利资源网站| 国产精品自拍偷拍视频| 在线成人中文字幕| 中日韩午夜理伦电影免费| 欧美猛交免费看| 日韩精品极品在线观看| 亚洲第一网站免费视频| 亚洲国产精彩中文乱码av在线播放| 日av在线播放中文不卡| 亚洲国产小视频| 国产日韩精品综合网站| 久久777国产线看观看精品| 日韩av片电影专区| 日韩精品丝袜在线| 欧美成人午夜免费视在线看片| 91九色视频在线| 国产成人精品久久久| 国产精品电影在线观看| 久久躁狠狠躁夜夜爽| 久久国产色av| 欧美成人在线免费| 日韩成人在线电影网| 日韩中文字幕欧美| 欧美高清在线播放| 欧美大全免费观看电视剧大泉洋| 一区二区三区黄色| 亚洲欧美三级伦理| 欧美主播福利视频| 亚洲视频在线观看视频| 亚洲色图35p| 日韩中文第一页| 欧美激情免费在线| 一区国产精品视频| 国产精品成人国产乱一区| 色偷偷91综合久久噜噜| 国产成人aa精品一区在线播放| 国产精品流白浆视频| 人妖精品videosex性欧美| 亚洲欧洲日本专区| 欧美视频免费在线| 久久亚洲精品中文字幕冲田杏梨| 亚洲第一页中文字幕| 午夜精品一区二区三区在线视| 日韩av手机在线| 日本人成精品视频在线| 国产精品主播视频| 亚洲美女性视频| 欧美日韩国产中文精品字幕自在自线| 欧美人与物videos| 欧美激情一区二区三区高清视频| 久久综合免费视频影院| 精品无人国产偷自产在线| 2025国产精品视频| 在线播放日韩av| 国产精品偷伦视频免费观看国产| 国产这里只有精品| 国产精品一二区| 国产精品美女免费| 精品国产欧美一区二区三区成人| 91成人福利在线| 国产精品专区第二| www国产91| 有码中文亚洲精品| 欧美第一页在线| 欧美日韩美女在线观看| 色系列之999| 国产999在线观看| 国产精品福利无圣光在线一区| 精品动漫一区二区三区| 日韩在线视频导航| 在线视频日韩精品| 欧美激情综合色综合啪啪五月| 精品国产成人在线| xx视频.9999.com| 国产成人精品网站| 亚洲最大av网站| 7777免费精品视频| 亚洲丝袜一区在线| 91精品国产高清久久久久久91| 国产成人精品日本亚洲| 国产精品成人在线| 在线观看精品国产视频| 日韩**中文字幕毛片| xxxxx成人.com| 欧美一区二粉嫩精品国产一线天| 欧美极品少妇xxxxⅹ免费视频| 国产欧美日韩亚洲精品| 亚洲福利视频网| 精品久久久久久久久国产字幕| 国产一区二区三区在线观看网站| 日韩视频免费中文字幕| 欧洲成人性视频|