<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java 中`Runnable`與`Thread`之間的區別 > 原文: [https://howtodoinjava.com/java/multi-threading/java-runnable-vs-thread/](https://howtodoinjava.com/java/multi-threading/java-runnable-vs-thread/) 眾所周知,在 Java 語言中,有兩種創建線程的方法。 一種使用[`Runnable`](https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html)接口,另一種通過擴展[線程](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html)類。 讓我們確定兩種方式之間的區別,即*擴展線程和實現`Runnable`*。 ## 1\. 使用`Runnable`接口 vs `Thread`類創建線程 讓我們快速檢查一下這兩種技術的 Java 代碼。 #### 1.1 `Runnable`接口 通過實現`Runnable`接口來創建線程的 Java 程序。 ```java public class DemoRunnable implements Runnable { public void run() { //Code } } //start new thread with a "new Thread(new demoRunnable()).start()" call ``` #### 1.2 線程類 通過擴展**線程**類來創建線程的 Java 程序。 ```java public class DemoThread extends Thread { public DemoThread() { super("DemoThread"); } public void run() { //Code } } //start new thread with a "new demoThread().start()" call ``` ## 2\. `Runnable`與`Thread`之間的區別 關于哪種更好的方法已經有很多爭論。 好吧,我也試圖找出答案,下面是我的學習內容。 1. 實現`Runnable`是首選的方法。 在這里,您并沒有真正專門化或修改線程的行為。 您只是給線程一些要運行的東西。 這意味著合成是更好的選擇。 2. Java 僅支持單一繼承,因此您只能擴展一個類。 3. 實例化一個接口可以使您的代碼與線程實現更加清晰地分離。 4. 實現`Runnable`使您的類更加靈活。 如果您擴展`Thread`,那么您執行的操作將始終處于線程狀態。 但是,如果您實現了`Runnable`,則不必這樣做。 您可以在線程中運行它,或將其傳遞給某種執行服務,或僅作為任務在單個線程應用程序中傳遞。 5. 如果您使用的是 JDK 4 或更低版本,則存在錯誤: [http://bugs.java.com/bugdatabase/view_bug.do;jsessionid=5869e03fee226ffffffffc40d4fa881a86e3:WuuT?bug_id=4533087](http://bugs.java.com/bugdatabase/view_bug.do;jsessionid=5869e03fee226ffffffffc40d4fa881a86e3:WuuT?bug_id=4533087) 它已在 Java 1.5 中修復,但 Sun 并不打算在 1.4 中修復它。 問題在于,在構造時,`Thread`被添加到內部線程表中的引用列表中。 在`start()`方法完成之前,它不會從該列表中刪除。 只要存在該引用,就不會收集垃圾。 這就是 Java 中`Runnable`接口和`Thread`類之間**區別**的全部。 如果您知道更多信息,請在評論部分中添加,然后將其包含在帖子內容中。 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看