• 编写多线程程序有几种实现方式?


    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> {

    276 页 共 485 页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();

    277 页 共 485 页}

    System.out.println(sum);

    }

    }

  • 相关阅读:
    SDWebImage内存性能优化
    dataGridView1数据导出
    listView数据导出
    sqlserver定时备份
    C#-IniFiles文件配置连接数据库
    (转)线程同步详解
    C#工具类:Json操作帮助类(转载)
    c#实现验证码功能
    屏蔽F12审查元素,禁止使用右键菜单
    c# excel如何导入到sqlserver数据库
  • 原文地址:https://www.cnblogs.com/programb/p/13021440.html
Copyright © 2020-2023  润新知