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

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

java多線程學習筆記

2019-11-14 22:08:52
字體:
來源:轉載
供稿:網友
java多線程學習筆記java多線程一、引言

通常,用并發結局的問題大體上可以分為“速度”和“設計可管理性”兩種。

  • 速度:多線程機制可以通過頻繁的線程間切換,有效的避免“阻塞”問題;
  • 設計可管理性:也就是改善代碼設計,并發編程更符合人的實際邏輯,可以有效的解決仿真相關的問題。
二、java線程1.創建與啟動

java中通常有兩種方式創建線程:

一旦創建一個新線程并開始執行,即調用start方法時,虛擬機中就又多一個進程,這個進程和原先的進程時并行的。

public class TaskR implements Runnable{    @Override    public void run() {        System.out.println("正在執行線程B!");        System.out.println("已經執行完線程B!");    }}public class test {    public static void main(String[] args) {        System.out.println("正在執行main函數111!");        TaskR b = new TaskR();        Thread threadB = new Thread(b);        System.out.println("準備添加線程B!");        threadB.start();        System.out.println("繼續執行main函數222!");//      for (int i = 0; i < 999999; i++);//延時代碼        System.out.println("正在執行main函數333!");    }}

如上程序執行結果輸出如下:

正在執行main函數111!準備添加線程B!繼續執行main函數222!正在執行main函數333!正在執行線程B!已經執行完線程B!

將main函數的注釋代碼去除注釋,增加代碼延時,輸出如下:

正在執行main函數111!準備添加線程B!繼續執行main函數222!正在執行線程B!已經執行完線程B!正在執行main函數333!

由上兩組對比不難發現,當線程threadB一旦開始執行(執行threadbB.start()),main函數這條線程和線程threadB是并發的。

另外需要注意的是,多線程表面上給人的感覺是多個任務同時進行,實際上并非如此,虛擬機通過頻繁的切換進程來給人同時執行的錯覺。

2.線程狀態的轉換

線程的狀態是線程控制的基礎。線程狀態總的可以分為五大類:生、等待、阻塞、睡眠、死。

  • 生:線程已經被new,且未執行;
  • start():線程調用start()方法后即進入等待/可運行狀態;
  • yield():此外正在執行的線程也可以通過Thread.yield()方法使當前線程暫停執行,并進入可運行狀態,從而讓步其他線程,但也可能讓步失敗,因為該線程可能在進入運行狀態后又被再次選中。(注:讓步的線程是接著執行線程,還是重新執行,經程序測試是接著執行未執行的代碼);
  • 阻塞:線程卡死,或不停執行,跳不出run()方法;
  • sleep():調用Thread.sleep()方法,使線程暫停執行一段時間,即睡眠,可以用來幫助其他進程獲得運行機會;
  • 死:線程執行完畢,執行完run()方法。
3.線程的同步與鎖

當多個線程同時訪問互斥(可交換)數據時,應該同步以保護數據,確保兩個線程不會同時更改它。通常用synchronized字段實現,而且只能同步方法或同步代碼快。

如果兩個線程要執行一個類中的synchronized方法,并且兩個線程使用相同的實例來調用方法,那么一次只能有一個線程能夠執行方法,另一個需要等待,直到鎖被釋放。

4.線程的交換
  • notify()
  • notifyAll()
  • wait()
5.線程的調度
  • 休眠:Thread.sleep()
  • 優先級
  • 讓步:Thread.yield()
  • 合并:join():join()方法是是在某個線程a中,加入一個線程b,線程b沒執行完前,a不得執行。

      public class TaskR implements Runnable{      @Override      public void run() {               System.out.println("正在執行線程B!");          try {              Thread.sleep(1000);          } catch (InterruptedException e) {              e.printStackTrace();          }          System.out.println("已經執行完線程B!");      }  }  public class test {      public static void main(String[] args) throws InterruptedException {          System.out.println("正在執行main函數!");          TaskR b = new TaskR();          Thread threadB = new Thread(b);          System.out.println("準備添加線程B!");          threadB.start();          System.out.println("執行完main");      }  }  public class test2 {      public static void main(String[] args) throws InterruptedException {          System.out.println("正在執行main函數!");          TaskR b = new TaskR();          Thread threadB = new Thread(b);          System.out.println("準備添加線程B!");          threadB.start();          System.out.println("threadB.join()");          threadB.join();          System.out.println("執行完main");      }  }

    分別執行test1和test2中的main執行結果如下:

      正在執行main函數!  準備添加線程B!  threadB.join()  執行完main  正在執行線程B!  已經執行完線程B!

    test2中添加join()方法:

      正在執行main函數!  準備添加線程B!  threadB.join()  正在執行線程B!  已經執行完線程B!  執行完main

    在threadB中調用sleep是為了讓main函數這條線程獲得執行機會。有結果,可知當threadB調用join方法后,即使sleep了main函數都不能跑完,說明join方法的作用,即必須threadB執行完才能繼續執行main函數。

  • 守護線程
線程池

java.util.concurrent.Executors。 例:

ExecutorService pool = Executors.newFixedThreadPool(2);Thread t1 = new MyThread(); Thread t2 = new MyThread();Thread t3 = new MyThread();Thread t4 = new MyThread();pool.execute(t1);pool.execute(t2);pool.execute(t3);pool.execute(t4);pool.shutdown();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕av一区二区三区谷原希美| 97视频在线观看播放| 亚洲aaaaaa| 69av成年福利视频| 欧美日韩色婷婷| 国产精品旅馆在线| 欧美日韩国产中文精品字幕自在自线| 色妞色视频一区二区三区四区| 91精品国产综合久久香蕉最新版| 久久久精品在线观看| 亚洲风情亚aⅴ在线发布| 日韩中文字幕视频| 欧美日韩一二三四五区| 欧美丰满少妇xxxxx| 欧美成人第一页| 欧美激情精品久久久久久久变态| 成人精品aaaa网站| 成人黄色激情网| 日本一区二区在线免费播放| 欧美一区二粉嫩精品国产一线天| 黄色91在线观看| 91极品女神在线| 亚洲成av人片在线观看香蕉| 97人人爽人人喊人人模波多| 日韩免费av片在线观看| 欧美午夜视频在线观看| 亚洲一区二区免费| 在线成人激情视频| 亚洲精品国产精品国自产在线| 亚洲欧美制服综合另类| 国产精品久久久久福利| 91在线直播亚洲| 国产丝袜视频一区| 久久中文字幕国产| 一夜七次郎国产精品亚洲| 亚洲aaaaaa| 国产精品丝袜一区二区三区| 亚洲人成77777在线观看网| 在线观看欧美日韩| 亚洲最大的av网站| 日韩视频在线免费观看| 狠狠色香婷婷久久亚洲精品| 性金发美女69hd大尺寸| 国产精品激情自拍| 久久久www成人免费精品张筱雨| 成人国产精品久久久| 在线播放国产一区中文字幕剧情欧美| 热99精品只有里视频精品| 狠狠躁夜夜躁久久躁别揉| 中文字幕v亚洲ⅴv天堂| 国产精品日本精品| 亚洲精品网址在线观看| 中文一区二区视频| 亚洲精品在线不卡| 亚洲欧美国产精品| 亚洲色图50p| 福利一区视频在线观看| 免费不卡欧美自拍视频| 欧美大片在线影院| 欧美日韩在线另类| 国内精品久久久久久| 美日韩精品免费观看视频| 亚洲一区二区三区视频| 亚洲精品小视频在线观看| 久久久噜噜噜久久中文字免| 777777777亚洲妇女| 久久精品成人欧美大片古装| 亚洲天堂网在线观看| 亚洲爱爱爱爱爱| 成人自拍性视频| 日韩在线视频中文字幕| 精品精品国产国产自在线| 欧美野外猛男的大粗鳮| 日韩欧美视频一区二区三区| 亚洲一区二区三区毛片| 国产福利精品在线| 国产日韩欧美在线视频观看| 国产精品美女久久| 欧美日韩高清在线观看| 91日本在线观看| 久久久国产91| 少妇高潮久久久久久潘金莲| 亚洲精品自拍视频| 日韩免费av片在线观看| 成人黄色av网站| 91国产精品91| 亚洲毛片在线看| xvideos成人免费中文版| 亚洲字幕一区二区| 精品国产一区av| 欧美性生活大片免费观看网址| 亚洲自拍在线观看| 国产精品免费电影| 欧美激情一二区| 国产成人精品av在线| 亚洲国产欧美精品| 一区二区欧美在线| 欧美成人激情视频| 91亚洲精品久久久| 欧美日韩中文在线| 91免费看片在线| 成人一区二区电影| 国产精品女人网站| 精品亚洲一区二区三区在线播放| 久久91超碰青草是什么| 中文字幕亚洲欧美在线| 欧美日韩国产999| 亚洲黄在线观看| 丝袜美腿亚洲一区二区| 国产伊人精品在线| 欧美日韩精品在线播放| 午夜精品国产精品大乳美女| 欧美视频精品一区| 国产亚洲精品激情久久| 最新69国产成人精品视频免费| 九九久久久久99精品| 国产精品一二区| 欧美成人精品在线视频| 欧美一区二三区| 国产一区二区三区丝袜| 亚洲自拍偷拍福利| 欧美性xxxx18| 国产综合在线观看视频| 91免费综合在线| 亚洲一区二区三区成人在线视频精品| 国产在线不卡精品| 欧美日韩国产色| 26uuu日韩精品一区二区| 91九色在线视频| 久久成人在线视频| 精品网站999www| 高清日韩电视剧大全免费播放在线观看| 成人av资源在线播放| 97国产精品人人爽人人做| 欧美黑人巨大xxx极品| 欧美做受高潮电影o| 久久免费国产视频| 韩国精品久久久999| 亚洲精品一区二区三区婷婷月| 欧美激情精品久久久久久免费印度| 尤物tv国产一区| 亚洲老板91色精品久久| 亚洲国产古装精品网站| 欧美床上激情在线观看| 久久福利视频导航| 国产精品女人久久久久久| 亚洲综合成人婷婷小说| 亚洲人成五月天| 国产成人精品久久二区二区| 欧美一级视频免费在线观看| 一区二区三区四区在线观看视频| 亚洲午夜久久久影院| 欧美激情高清视频| 欧美高清理论片| 亚洲黄色www网站| 91黑丝在线观看| 国产美女精品视频| 欧美成人sm免费视频| 欧美精品videossex88| 在线观看精品国产视频| 欧美日韩亚洲国产一区| 国产精品高清在线观看| 超碰97人人做人人爱少妇| 国产精品日本精品|