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

java  線程詳解及線程與進程的區(qū)別

 更新時間:2017年01月11日 10:24:59   投稿:lqh  
這篇文章主要介紹了java 線程詳解及線程與進程的區(qū)別的相關(guān)資料,網(wǎng)上關(guān)于java 線程的資料很多,對于進程的資料很是,這里就整理下,需要的朋友可以參考下

java  線程詳解及線程與進程的區(qū)別

1.進程與線程

   每個進程都獨享一塊內(nèi)存空間,一個應用程序可以同時啟動多個進程。比如IE瀏覽器,打開一個Ie瀏覽器就相當于啟動了一個進程。

   線程指進程中的一個執(zhí)行流程,一個進程可以包含多個線程。

   每個進程都需要操作系統(tǒng)為其分配獨立的內(nèi)存空間,而同一個進程中的多個線程共享這塊空間,即共享內(nèi)存等資源。

   每次調(diào)用java.exe的時候,操作系統(tǒng)都會啟動一個Java虛擬機進程,當啟動Java虛擬機進程時候,Java虛擬機都會創(chuàng)建一個主線程,該線程會從程序入口main方法開始執(zhí)行。

  Java虛擬機每啟動一個線程,就給會給該線程分配一個線程方法棧,用來存放相關(guān)信息(比如局部變量等),線程就在這個棧上運行。所以Java對象中的局部變量都是線程安全的,但實例變量及類變量由于不是保存在棧中,所以不是線程安全的。

  進程有三種狀態(tài):就緒、執(zhí)行、阻塞。

 

2.線程創(chuàng)建方式

   Runnable方式:(此種方式靈活,推薦使用)

public class Thread02 implements Runnable {
 
  public static void main(String[] args) {
    Runnable r = new <strong>Thread02</strong>();
    Thread t1 = new Thread(<strong>r</strong>, "t1");
    /** 
     *   Thread源碼
     *   public Thread(Runnable target, String name) {
          init(null, target, name, 0);
             }
     */
    Thread t2 = new Thread(r, "t2");
    t1.start(); // 啟動線程t1,處于就緒狀態(tài),等待cpu
    t2.start(); // 啟動線程t2,處于就緒狀態(tài),等待cpu
    t1.run(); // 主線程main調(diào)用對象t1的run方法
  }
 
  public void run() {
    System.out.println("thread's name is "
        + Thread.currentThread().getName());
  }
 
}

運行結(jié)果可能是:

thread's name is t1
thread's name is main
thread's name is t2

Thead方式

public class Thread03 extends Thread {
 
  public static void main(String[] args) {
    Thread03 t1 = new <strong>Thread03</strong>();   //不注意的情況下寫成了Thread t1=new Thread()  注:Thread03此時就是一個線程了
    t1.start();
  }
 
  public void run() {
    System.out.println("thread's name is "
        + Thread.currentThread().getName());
  }
}

運行結(jié)果:thread's name is Thread-0

注意:每次程序運行時除了自定義的線程外還有一個main線程。

 綜合:

public class Thread01 {
  public static void main(String[] args) {

    Thread thread=new Thread();
    thread.start();//真正起作用 的是run()
    /**而Thread中的run
     * public void run() {
      if (target != null) {
        target.run();
      }
      }
      所以自己創(chuàng)建的線程要重寫run方法,把要執(zhí)行的內(nèi)容放到run()中,所以要實現(xiàn)接口或繼承進而產(chǎn)生子類
     */
    
    //創(chuàng)建線程的方式1 thread子類方式(繼承)
    Thread thread1=new Thread(){
      public void run() {
        while(true){
          try {
            Thread.sleep(500);//休息500毫秒
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          //Thread.currentThread()得到當前線程
          System.out.println("線程1的名字是 "+Thread.currentThread().getName());
        }
      }
    };
//    thread1.start(); //不寫  線程無法啟動
    
    
    //創(chuàng)建線程的方式2 runnable方式(實現(xiàn)) 推薦使用 
    Thread thread2=new Thread(new Runnable(){

      public void run() {

        while(true){
          try {
            Thread.sleep(300);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          System.out.println("thread2'name is "+Thread.currentThread().getName());
          
        }
      }});
//    thread2.start();
    
    //執(zhí)行的是thread
    new Thread(new Runnable(){
      public void run() {
        System.out.println("runnable "+Thread.currentThread().getName());
      }}){
      public void run() { //子類中的run方法覆蓋父類中的run方法,這樣就不會執(zhí)行runnable
        System.out.println("thread "+Thread.currentThread().getName());
      }
    }.start();
  }
  /***
   * 在單個cpu中執(zhí)行多線程很有可能降低執(zhí)行效率而不是提高 一個人在不同地方做同一件事情
   */
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Nacos封裝通用HttpClient詳解

    Nacos封裝通用HttpClient詳解

    這篇文章主要介紹了Nacos封裝通用HttpClient用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringIOC的注解應用方式

    SpringIOC的注解應用方式

    在Spring框架中,除了通過xml配置文件進行Bean管理外,還可以采用注解的方式實現(xiàn)Bean的注冊和自動裝配,通過在類上添加@Component、@Service、@Repository、@Controller等注解,可以將Bean注冊到IOC容器中
    2024-11-11
  • Java 和 JavaScript 真正通用的Base64編碼詳解

    Java 和 JavaScript 真正通用的Base64編碼詳解

    這篇文章主要介紹了Java 和 JavaScript 真正通用的Base64編碼詳解的相關(guān)資料,附有Java和Javascript 的Base64編碼,需要的朋友可以參考下
    2016-11-11
  • javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復登錄問題的解決方法

    javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復登錄問題的解決方法

    這篇文章主要為大家詳細介紹了javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復登錄問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解Spring如何掃描自定義的注解

    詳解Spring如何掃描自定義的注解

    本文給大家詳細介紹了Spring如何掃描自定義的注解,在Spring中,可以使用注解來實現(xiàn)依賴注入、AOP等功能,同時,Spring也支持自定義注解,使得開發(fā)人員可以更靈活地使用注解,需要的朋友可以參考下
    2024-02-02
  • 詳解Java中的時區(qū)類TimeZone的用法

    詳解Java中的時區(qū)類TimeZone的用法

    TimeZone可以用來獲取或者規(guī)定時區(qū),也可以用來計算時差,這里我們就來詳解Java中的時區(qū)類TimeZone的用法,特別要注意下面所提到的TimeZone相關(guān)的時間校準問題.
    2016-06-06
  • Spring Boot Shiro在Web應用中的作用詳解

    Spring Boot Shiro在Web應用中的作用詳解

    這篇文章主要為大家介紹了Spring Boot Shiro在Web應用中的作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java程序開發(fā)環(huán)境配置圖文教程

    Java程序開發(fā)環(huán)境配置圖文教程

    這篇文章主要為大家詳細介紹了Java程序開發(fā)環(huán)境配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • springboot layui hutool Excel導入的實現(xiàn)

    springboot layui hutool Excel導入的實現(xiàn)

    本文主要介紹了springboot layui hutool Excel導入的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • IntelliJ IDEA版Postman強大功能介紹

    IntelliJ IDEA版Postman強大功能介紹

    這篇文章主要為大家介紹了IDEA版Postman的強大功能介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論

方正县| 吉首市| 政和县| 商洛市| 新泰市| 五莲县| 衢州市| 罗江县| 龙山县| 庐江县| 布尔津县| 祁东县| 华蓥市| 汝州市| 乳山市| 修武县| 卢氏县| 鹿邑县| 福清市| 定州市| 历史| 新绛县| 台中市| 岐山县| 谢通门县| 祁连县| 平安县| 临漳县| 汉沽区| 鄯善县| 凤凰县| 高陵县| 塔河县| 长武县| 包头市| 定襄县| 肇州县| 鄂托克旗| 松阳县| 新郑市| 宁安市|