<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ###1、首先來了解一下線程和進程的概念 進程的概念: 進程是操作系統資源管理的最小單位,進程是一個動態的實體,他是程序的一次執行過程。也叫作一個控制單元 線程的概念: 線程是進程中獨立的控制單元,線程控制著進程的執行。一個進程中至少有一個線程。 java VM(java虛擬機)在運行時啟動了一個進程---java.exe 該進程在執行時,至少有一個線程在控制著java程序的運行,并且這個線程存在于java的main函數中, 該線程稱之為java的主線程。 擴展:在JVM運行時,除了main函數中的線程在運行外,還有JVM中負責java垃圾回收的線程在運行。因此,java不是單線程運行程序。 ![](https://box.kancloud.cn/2016-03-31_56fcdcef9aa8f.jpg) ### 實現多線程的第一種方式(單繼承方式): 1.繼承自Thread類實現多線程 步驟: 1)創建一個類繼承Thread 2)覆寫run方法 目的是存放多線程要執行的自定義代碼。 3)在main函數中創建該類 4)使用start()方法調用該線程(start方法有兩種含義:1,啟動多線程。2,調用線程中的run方法) ~~~ public class Day1{ public static void main(String args[]){ DemoThread dt = new DemoThread(); dt.start(); //用于啟動線程,并自動執行run方法。 dt.run(); //只是單純的對象調用,在主線程中執行,并不開啟子線程。 for(int i=0;i<50;i++){ System.out.println("main run-----"+i); } } } class DemoThread extends Thread{ public void run(){ for(int i=0;i<50;i++) System.out.println("demo run-----"+i); } } ~~~ 我們發現運行同一個程序,他們的運行結果卻不太相同, 這是多個線程都獲取系統的CPU資源,CPU執行到誰,誰就運行。 CPU在某一時刻只能執行一個程序(多核除外),CPU在做著快速的切換,以達到看上去是在同時執行的效果。 我們通過打印輸出,來判斷到底是哪一個線程搶占到了CPU的資源。 Thread類的意義-----用于描述線程。 該類定義了一個功能,用于存儲線程要運行的代碼,而這個存儲功能就是run方法。 run方法中存儲線程要執行的 自定義代碼塊。 而start方法用于啟動線程,并自動執行run方法。 Thread類中提供的常用的方法: static Thread currentThread: 返回當前正在執行的線程對象的引用 String getName();返回當前線程的名稱。 當使用Thread的無參構造創建線程實例時,java虛擬機會自動為線程創建一個名字。(以Thread-編號的格式) static void sleep(long time)? 使線程休眠time時間。 ### 創建線程的第二種方式(實現Runnable接口): 實現Runnable 接口來實現多線程: 步驟: 1)創建類實現Runnable接口 2)實現Runnable接口中的run方法 3)創建Thread對象 4)將Runnable對象作為實際參數傳遞給Thread的構造方法 5)調用Thread類的start方法,自動執行Runnable對象中的run方法 ~~~ public class Day1Runable{ public static void main(String args[]){ DemoRunnable dr = new DemoRunnable(); Thread t1 = new Thread(dr); Thread t2 = new Thread(dr); Thread t3 = new Thread(dr); Thread t4 = new Thread(dr); t1.start(); t2.start(); t3.start(); t4.start(); } } class DemoRunnable implements Runnable{ private int ticket=100; public void run(){ while(true){ if(ticket>0) System.out.println(Thread.currentThread().getName()+"--售票:"+ticket--); } } } ~~~ 問題:繼承方式與實現方式有什么區別 1、避免了單繼承的局限性 2、多線程執行代碼位置不同: 繼承Thread類:代碼存放在Thread類的run方法中 實現Runnable類:代碼存放在Runnable接口的run方法中。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看