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

JAVA線程用法詳解

 更新時間:2014年08月26日 09:19:26   投稿:shichen2014  
這篇文章主要介紹了JAVA線程用法,配合實例針對Java中線程的開啟、sleep、合并與讓出等進行了較為深入的分析,需要的朋友可以參考下

本文配合實例較為詳細的講解了Java的線程技術(shù),相信對于深入理解Java程序設(shè)計有一定的幫助。具體如下:

很多人在學(xué)習(xí)JAVA時都對線程都有一定的了解,而當(dāng)我們開始接觸Android開發(fā)時,才真真正正的發(fā)現(xiàn)了線程是多麼的重要,本文就把對Java線程的用法心得分享給大家,供大家參考。

首先,大家一定要分清線程和進程不是一回事,進程是什么呢?進程就如我們需要執(zhí)行class文件,而線程才是真正調(diào)用CPU資源來運行的。一個class文件一般只有一個進程,但線程可以有很多個,線程的執(zhí)行是一種異步的執(zhí)行方式。

一、如何在main函數(shù)中再開啟一個線程:

示例代碼如下:

public class Thread_one {
  public static void main(String [] args){
    Run run = new Run();
    //run.run();//此為方法的調(diào)用,和線程有著天壤之別
    Thread thread = new Thread(run);
    thread.start();//啟動線程,調(diào)用線程的run()方法
    for(int i=1; i<=20; i++){
      System.out.println("主線程i的 值:--------"+i);
    }
  }
}
class Run implements Runnable{

  @Override
  public void run() {
    for(int i=1; i<=20; i++){
      System.out.println("子線程i的 值:"+i);
    }
  }
}

二、線程中的sleep方法

示例代碼如下:

public class Thread_sleep {
  /*
   * 線程停頓
   */
  public static void main(String [] args){
    Runone run = new Runone();
    Thread thread = new Thread(run); 
    thread.start();
    try {
      Thread.sleep(5000);
      thread.interrupt();//中斷線程的執(zhí)行
      //thread.stop();//相對中斷線程,stop過于粗暴,不建議使用,一般在需要強制關(guān)閉子線程時方使用此方法
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}
class Runone implements Runnable{
  @Override
  public void run() {
    for(int i=1 ; i<10; i++){
      try {
        Thread.sleep(1000);
        System.out.println("-----"+new Date()+"-----");
      } catch (InterruptedException e) {
        return ;//當(dāng)捕獲到子線程被中斷時,直接關(guān)閉子線程
      }
    }
  }
}

在這里特別說明一點,thread.interrupt();可以中斷線程的執(zhí)行,相對stop溫柔那么一點點,不過還不是最佳的關(guān)閉線程的方法,下面就為大家提供一種方式:

public class Thread_stop {
  public static void main(String [] args){
    Runthree run = new Runthree();
    Thread th = new Thread(run);
    th.start();
    try {
      Thread.sleep(5000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    run.setStop();
  }
}
class Runthree implements Runnable{
  boolean flag;
  @Override
  public void run() {
    flag = true;
    int i = 0;
    while(flag){
      try {
        System.out.println("子線程----"+(i++));
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
  public void setStop(){
    flag = false;
  }  
}

下面就簡單給大家介紹一下線程中的合并和讓出:

一、如何合并線程,此處調(diào)用了join()方法

示例代碼如下:

public class Thread_join {
  /*
   * 合并線程
   */
  public static void main(String [] args){
    Runtwo run = new Runtwo();
    Thread thread = new Thread(run);
    thread.start();
    try {
      thread.join();//合并線程,此時相當(dāng)于方法調(diào)用
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    for(int i=0; i<10; i++){
      System.out.println("主線程:"+i);
    }
  }
}
class Runtwo implements Runnable{

  @Override
  public void run() {
    for(int i=0; i<10; i++){
      System.out.println("子線程:----"+i);
    }
  }  
}

二、如何讓出線程,此處調(diào)用了Thread的yield()方法,如下所示:

public class Thread_yield {

  /**讓出CPU
   * @param args
   */
  public static void main(String[] args) {
    Th th = new Th("aaa");
    th.start();
    for(int i = 0 ; i<=10; i++){
      System.out.println("主線程----"+i);
    }
  }
}
class Th extends Thread{
  Th(){}
  Th(String s){super(s);}

  @Override
  public void run() {
    for(int i = 0; i<=10; i++){
      if(i%3!=0){
        System.out.println("子線程"+i);
      }else{
        System.out.println("子線程i="+i+" 線程進行切換");
        yield();//從Thread繼承方可使用此方法
      }
    }
  }
}

最后和大家分享一下關(guān)于線程的優(yōu)先級的問題,代碼如下所示:

public class Thread_priority {
  /*
   * priority設(shè)置線程的優(yōu)先級
   * Thread默認的優(yōu)先級為5;Thread的最大優(yōu)先級為10,最小為0
   */
  public static void main(String [] args){
    T1 t1 = new T1();
    T2 t2 = new  T2();
    t1.start();  
    //t1.setPriority(Thread.NORM_PRIORITY+3);//設(shè)置t1的優(yōu)先級
    t2.start();
  }
}
class T1 extends Thread{

  @Override
  public void run() {
    for(int i = 0; i<50; i++){
      System.out.println("線程T1-----"+i);
    }
  }
}
class T2 extends Thread{

  @Override
  public void run() {
    for(int i = 0; i<50; i++){
      System.out.println("線程T2"+i);
    }
  }  
}

相信大家通過以上代碼基本已經(jīng)了解JAVA中的線程機制,希望本文所述對大家深入學(xué)習(xí)Java程序設(shè)計有所幫助。

相關(guān)文章

  • Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼

    Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼

    這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • java循環(huán)刪除List元素報錯的原因分析與解決

    java循環(huán)刪除List元素報錯的原因分析與解決

    大家在工作中應(yīng)該都會遇到從List集合中刪除某一個或多個元素的業(yè)務(wù)場景,相信大家都會避開在循環(huán)里面刪除元素,使用其他方式處理,這是為什么呢,下面小編就來和大家詳細聊聊
    2023-11-11
  • SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別小結(jié)

    SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別小結(jié)

    用SpringBoot框架做項目時,經(jīng)常需要前端給后端傳遞參數(shù),本文主要介紹了SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • java如何強制刪除java程序占用的文件

    java如何強制刪除java程序占用的文件

    這篇文章主要介紹了java如何強制刪除java程序占用的文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Mybatis中如何設(shè)置sqlSession自動提交

    Mybatis中如何設(shè)置sqlSession自動提交

    在MyBatis中,默認情況下,獲取的SqlSession對象不會自動提交事務(wù),這意味著在進行更新、刪除或插入等操作后,需要顯式調(diào)用commit方法來提交事務(wù),但是,可以在獲取SqlSession時通過將openSession方法的參數(shù)設(shè)置為true
    2024-09-09
  • MybatisPlus中QueryWrapper常用方法總結(jié)

    MybatisPlus中QueryWrapper常用方法總結(jié)

    MyBatis-Plus是一個Mybatis增強版工具,在MyBatis上擴充了其他功能沒有改變其基本功能,為了簡化開發(fā)提交效率而存在,queryWrapper是mybatis plus中實現(xiàn)查詢的對象封裝操作類,本文就給大家總結(jié)了MybatisPlus中QueryWrapper的常用方法,需要的朋友可以參考下
    2023-07-07
  • SpringSecurity授權(quán)機制的實現(xiàn)(AccessDecisionManager與投票決策)

    SpringSecurity授權(quán)機制的實現(xiàn)(AccessDecisionManager與投票決策)

    本文主要介紹了SpringSecurity授權(quán)機制的實現(xiàn),其核心是AccessDecisionManager和投票系統(tǒng),下面就來介紹一下,感興趣的可以了解一下
    2025-04-04
  • 深入了解Java核心類庫--Objects類

    深入了解Java核心類庫--Objects類

    這篇文章主要介紹了Java中的Object類詳細介紹,本文講解了Object類的作用、Object類的主要方法、Object類中不能被重寫的方法、Object類的equals方法重寫實例等內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • java Thumbnails 圖片處理的使用

    java Thumbnails 圖片處理的使用

    這篇文章主要介紹了java Thumbnails 圖片處理的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • @PathParam和@QueryParam區(qū)別簡析

    @PathParam和@QueryParam區(qū)別簡析

    這篇文章主要介紹了@PathParam和@QueryParam區(qū)別,分享了相關(guān)實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論

神木县| 缙云县| 西和县| 呼和浩特市| 福贡县| 郎溪县| 赤水市| 徐闻县| 额尔古纳市| 保康县| 高雄市| 集贤县| 河南省| 惠州市| 巴东县| 商城县| 嘉荫县| 荣成市| 集贤县| 南平市| 克什克腾旗| 长葛市| 阿巴嘎旗| 高青县| 信阳市| 梨树县| 图片| 湾仔区| 长沙县| 晋州市| 孝昌县| 岳西县| 怀柔区| 西安市| 汉中市| 义乌市| 兰坪| 乐陵市| 米脂县| 柘城县| 新和县|