麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚洲欧美视频 | 在线免费观看欧美 | 黄wwww| 色中色在线视频 | 久久艳片 | 欧美视频一区二区三区 | 成人9禁啪啪无遮挡免费 | 国产1区2 | 国产精品久久久久国产精品三级 | 精品国产91一区二区三区 | 黄色网址免费在线播放 | 宅男噜噜噜66一区二区 | 99r国产精品 | 海外中文字幕在线观看 | 色吧久久 | 国产午夜精品一区二区三区四区 | 国产一区二区免费在线观看 | 最新一级毛片 | 欧美成人黄色片 | 91在线视频观看 | 在线播放一级片 | 91女上位 在线播放 性欧美日本 | 亚洲网站免费 | 伊人一二三四区 | 日韩欧美中文字幕视频 | 欧美自拍三区 | 涩涩激情网 | 国产在线看一区 | 蜜桃91麻豆 | 亚洲精品一区国产精品丝瓜 | 久久草在线视频国产 | 精品1| 成人国产在线看 | 乱淫67194| 久久综合久久精品 | 黄色大片大毛片 | 一级免费在线视频 | 亚洲欧美一区二区三区在线观看 | 国产亚洲精品久久久久久久久 | a一级黄色大片 | 爱射av|