編寫多線程程序有幾種實現方式?


Java 5以前實現多線程有兩種實現方法:一種是繼承Thread類;另一種是實現Runnable接口。

兩種方式都要通過重寫run()方法來定義線程的行為,推薦使用后者,因為Java中的繼承是單繼承,一個類有一個父類,如果繼承了Thread類就無法再繼承其他類了,顯然使用Runnable接口更為靈活

補充:Java 5以后創建線程還有第三種方式:實現Callable接口,該接口中的call方法可以在線程執行結束時產生一個返回值,代碼如下所示:

 

import java.util.ArrayList;

 

import java.util.List;

 

import java.util.concurrent.Callable;

 

import java.util.concurrent.ExecutorService;

 

import java.util.concurrent.Executors;

 

import java.util.concurrent.Future;

 

 

 

class MyTask implements Callable<Integer> {

 

     private int upperBounds;

 

 

 

     public MyTask( int upperBounds) {

 

         this .upperBounds = upperBounds;

 

     }

 

 

 

     @Override

 

     public Integer call() throws Exception {

 

         int sum = 0 ;

 

         for ( int i = 1 ; i <= upperBounds; i++) {

 

             sum += i;

 

         }

 

         return sum;

 

     }

 

 

 

}

 

 

 

class Test {

 

 

 

     public static void main(String[] args) throws Exception {

 

         List<Future<Integer>> list = new ArrayList<>();

 

         ExecutorService service = Executors.newFixedThreadPool( 10 );

 

         for ( int i = 0 ; i < 10 ; i++) {

 

             list.add(service.submit( new MyTask(( int ) (Math.random() * 100 ))));

 

         }

 

 

 

         int sum = 0 ;

 

         for (Future<Integer> future : list) {

 

             // while(!future.isDone()) ;

 

             sum += future.get();

 

         }

 

 

 

         System.out.println(sum);

 

     }

 

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM