Java编辑八线程程序有三种完毕格局?

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

 

``}

 

}

 

相关文章