天天看點

多線程_多線程方式3的求和案例

package cn.itcast_10;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/*
 * 多線程實作的方式3:
 *     A:建立一個線程池對象,控制要建立幾個線程對象。
 *       public static ExecutorService newFixedThreadPool(int nThreads)
 *     B:這種線程池的線程可以執行:
 *       可以執行Runnable對象或者Callable對象代表的線程
 *       做一個類實作Runnable接口。
 *     C:調用如下方法即可
 *       Future<?> submit(Runnable task)
 *       <T> Future<T> submit(Callable<T> task)
 *     D:我就要結束,可以嗎?
 *       可以。
 */
public class CallableDemo {
  public static void main(String[] args) throws InterruptedException,
      ExecutionException {
    // 建立線程池對象
    ExecutorService pool = Executors.newFixedThreadPool(2);

    // 建立線程對象并運作
    Future<Integer> f1 = pool.submit(new MyCallable(100));
    Future<Integer> f2 = pool.submit(new MyCallable(200));

    // V get()
    Integer i1 = f1.get();
    Integer i2 = f2.get();

    System.out.println(i1);
    System.out.println(i2);

    // 結束線程池
    pool.shutdown();
  }
}      
package cn.itcast_10;

import java.util.concurrent.Callable;

/*
 * 線程求和案例
 */
public class MyCallable implements Callable<Integer> {
  private int number;

  public MyCallable(int number) {
    this.number = number;
  }

  @Override
  public Integer call() throws Exception {
    int sum = 0;
    for (int x = 1; x <= number; x++) {
      sum += x;
    }
    return sum;
  }
}