编写多线程程序有两种达成情势?

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``))));

 

``}

 

Java, 

 

``int sum = ``0``;

 

``for``(Future<Integer> future : list) {

 

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

 

``sum += future.get();

 

``}

 

 

 

``System.out.println(sum);

 

``}

 

}

 

相关文章