<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之旅 廣告
                ## Java實現多線程的方式及三種方式的區別 有三種使用線程的方法: * 實現 Runnable 接口; * 實現 Callable 接口; * 繼承 Thread 類。 實現 Runnable 和 Callable 接口的類只能當做一個可以在線程中運行的任務,不是真正意義上的線程,因此最后還需要通過 Thread 來調用。可以說任務是通過線程驅動從而執行的。 ### **實現 Runnable 接口** 如果自己的類已經?extends?另一個類,就無法直接?extends?Thread?,此時,可以實現一個Runnable?接口。 通過 Thread 調用 start() 方法來啟動線程。 ~~~java public class MyRunnable implements Runnable { public void run() { // ... } } ~~~ ~~~java public static void main(String[] args) { MyRunnable instance = new MyRunnable(); Thread thread = new Thread(instance); thread.start(); } ~~~ ### **ExecutorService**、**Callable**、**Future**有返回值線程 有返回值的任務必須實現?Callable?接口,類似的,無返回值的任務必須?Runnable?接口。執行 Callable?任務后,可以獲取一個?Future?的對象,在該對象上調用?get?就可以獲取到?Callable?任務 返回的?Object?了,再結合線程池接口?ExecutorService?就可以實現傳說中有返回結果的多線程 了。 ~~~java public class MyCallable implements Callable<Integer> { public Integer call() { return 123; } } ~~~ ~~~java public static void main(String[] args) throws ExecutionException, InterruptedException { MyCallable mc = new MyCallable(); FutureTask<Integer> ft = new FutureTask<>(mc); Thread thread = new Thread(ft); thread.start(); System.out.println(ft.get()); } ~~~ ### **繼承 Thread 類** Thread?類本質上是實現了?Runnable?接口的一個實例,代表一個線程的實例。啟動線程的唯一方 法就是通過?Thread?類的?start()實例方法。start()方法是一個?native?方法,它將啟動一個新線 程,并執行?run()方法。 ~~~java public class MyThread extends Thread { public void run() { // ... } } ~~~ ~~~java public static void main(String[] args) { MyThread mt = new MyThread(); mt.start(); } ~~~ ### 實現接口 VS 繼承 Thread 實現接口會更好一些,因為: * Java 不支持多重繼承,因此繼承了 Thread 類就無法繼承其它類,但是可以實現多個接口; * 類可能只要求可執行就行,繼承整個 Thread 類開銷過大。 ### **基于線程池的方式** 線程和數據庫連接這些資源都是非常寶貴的資源。那么每次需要的時候創建,不需要的時候銷 毀,是非常浪費資源的。那么我們就可以使用緩存的策略,也就是使用線程池。 ~~~java //創建線程池 ExecutorServicethreadPool=Executors.newFixedThreadPool(10); while(true){ threadPool.execute(newRunnable(){//提交多個線程任務,并執行 @Override publicvoidrun(){ System.out.println(Thread.currentThread().getName()+"isrunning.."); try{ Thread.sleep(3000); }catch(InterruptedExceptione){ e.printStackTrace(); } } }); } ~~~
                  <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>

                              哎呀哎呀视频在线观看