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

詳解java線程的開始、暫停、繼續(xù)

 更新時間:2017年01月03日 12:07:13   作者:Joanna.Yan  
本文將介紹通過線程讀取文件內(nèi)容,并且可以控制線程的開始、暫停、繼續(xù),來控制讀文件。具有一定的參考作用,下面跟著小編一起來看下吧

Android項(xiàng)目中的一個需求:通過線程讀取文件內(nèi)容,并且可以控制線程的開始、暫停、繼續(xù),來控制讀文件。在此記錄下。

直接在主線程中,通過wait、notify、notifyAll去控制讀文件的線程(子線程),報(bào)錯:java.lang.IllegalMonitorStateException。

需要注意的幾個問題:

  1. 任何一個時刻,對象的控制權(quán)(monitor)只能被一個線程擁有。
  2. 無論是執(zhí)行對象的wait、notify還是notifyAll方法,必須保證當(dāng)前運(yùn)行的線程取得了該對象的控制權(quán)(monitor)。
  3. 如果在沒有控制權(quán)的線程里執(zhí)行對象的以上三種方法,就會報(bào)錯java.lang.IllegalMonitorStateException。
  4. JVM基于多線程,默認(rèn)情況下不能保證運(yùn)行時線程的時序性。

線程取得控制權(quán)的3種方法:

  1. 執(zhí)行對象的某個同步實(shí)例方法。
  2. 執(zhí)行對象對應(yīng)類的同步靜態(tài)方法。
  3. 執(zhí)行對該對象加同步鎖的同步塊。

這里將開始、暫停、繼續(xù)封裝在線程類中,直接調(diào)用該實(shí)例的方法就行。

public class ReadThread implements Runnable{
  public Thread t;
  private String threadName;
  boolean suspended=false;
  public ReadThread(String threadName){
   this.threadName=threadName;
   System.out.println("Creating " + threadName );
  }
  public void run() {
   for(int i = 10; i > 0; i--) {
   System.out.println("Thread: " + threadName + ", " + i);
   // Let the thread sleep for a while.
   try {
    Thread.sleep(300);
    synchronized(this) {
     while(suspended) {
      wait();
     }
    }
   } catch (InterruptedException e) {
    System.out.println("Thread " + threadName + " interrupted.");
    e.printStackTrace();
   }
   System.out.println("Thread " + threadName + " exiting.");
   }
  }
  /**
   * 開始
   */
  public void start(){
   System.out.println("Starting " + threadName );
   if(t==null){
    t=new Thread(this, threadName);
    t.start();
   }
  }
  /**
   * 暫停
   */
   void suspend(){
   suspended = true;
  }
   /**
   * 繼續(xù)
   */
   synchronized void resume(){
    suspended = false;
    notify();
   }
 }

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Java Floyd算法求有權(quán)圖(非負(fù)權(quán))的最短路徑并打印

    Java Floyd算法求有權(quán)圖(非負(fù)權(quán))的最短路徑并打印

    這篇文章主要介紹了Java Floyd算法求有權(quán)圖(非負(fù)權(quán))的最短路徑并打印,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Springboot項(xiàng)目如何兼容老的Spring項(xiàng)目問題

    Springboot項(xiàng)目如何兼容老的Spring項(xiàng)目問題

    這篇文章主要介紹了Springboot項(xiàng)目如何兼容老的Spring項(xiàng)目問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java的數(shù)據(jù)類型和參數(shù)傳遞(詳解)

    Java的數(shù)據(jù)類型和參數(shù)傳遞(詳解)

    下面小編就為大家?guī)硪黄狫ava的數(shù)據(jù)類型和參數(shù)傳遞(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java基于JDBC連接Oracle 11g Release2實(shí)例分析

    java基于JDBC連接Oracle 11g Release2實(shí)例分析

    這篇文章主要介紹了java基于JDBC連接Oracle 11g Release2的方法,實(shí)例分析了JDBC連接Oracle 11g Release2容易出現(xiàn)的異常與解決方法,需要的朋友可以參考下
    2015-06-06
  • lombok中@Data使用常見的小坑及解決

    lombok中@Data使用常見的小坑及解決

    在Java中使用Lombok庫的@Data注解時,布爾類型屬性可能導(dǎo)致生成的get方法不符合預(yù)期,對于非is開頭的布爾屬性,Lombok生成的方法會添加is前綴,導(dǎo)致原本期待的get方法不存在,例如,對于屬性private boolean active,Lombok會生成方法名為isActive而不是getActive
    2024-10-10
  • Swing拆分窗格控件JSplitPane使用詳解

    Swing拆分窗格控件JSplitPane使用詳解

    這篇文章主要為大家詳細(xì)介紹了Swing拆分窗格控件JSplitPane的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot業(yè)務(wù)邏輯異常的處理方法介紹

    SpringBoot業(yè)務(wù)邏輯異常的處理方法介紹

    本篇文章為大家展示了如何在SpringBoot中統(tǒng)一處理邏輯異常,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲
    2022-09-09
  • Java中PageHelper分頁后對list操作導(dǎo)致分頁無效

    Java中PageHelper分頁后對list操作導(dǎo)致分頁無效

    在項(xiàng)目中使用分頁插件的時候發(fā)現(xiàn)PageHelper插件失效了,本文就來介紹一下Java中PageHelper分頁后對list操作導(dǎo)致分頁無效的解決方法,感興趣的可以了解一下
    2021-05-05
  • Spring各版本新特性的介紹

    Spring各版本新特性的介紹

    今天小編就為大家分享一篇關(guān)于Spring各版本新特性的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • JAVA值傳遞和引用傳遞方式

    JAVA值傳遞和引用傳遞方式

    文章總結(jié):在Java中,處理不可變集合時,直接修改操作會拋出異常,正確的做法是使用可變集合類型,如ArrayList,或者通過流操作(stream().filter())來實(shí)現(xiàn)修改,理解Java方法參數(shù)的傳遞方式(值傳遞)是關(guān)鍵,這決定了如何正確地修改對象的狀態(tài)
    2024-11-11

最新評論

怀柔区| 大关县| 敦化市| 交城县| 平阳县| 海南省| 天柱县| 双桥区| 武胜县| 二连浩特市| 成武县| 泉州市| 庆云县| 临泉县| 寻乌县| 湾仔区| 揭西县| 贵州省| 巴里| 梅河口市| 固原市| 慈利县| 贺兰县| 元江| 安徽省| 锦屏县| 蓬莱市| 梁河县| 峡江县| 宜黄县| 息烽县| 诏安县| 土默特左旗| 庐江县| 长宁区| 南投市| 桐梓县| 泌阳县| 芜湖市| 三亚市| 隆尧县|