线程的四种创建方式

简介: 线程的四种创建方式

3 通过 ExecutorService 和 Callable<Class> 实现有返回值的线程

我们需要在主线程中开启多个线程去执行一个任务,然后收集各个线程的返回结果并将最终结果进行汇总,这是就需要用到 Callable 接口。

具体步骤:

(1)创建一个类实现Callable接口

(2)重写 call()  方法

调用步骤:

(1)创建线程池

(2)创建接收结果的列表集合

(3)创建线程对象

(4)将线程对象提交到线程池中,并将返回结果接收

(5)将返回结果加入结果集合

(6)关闭线程池

//通过实现Callable接口来创建线程类
public class CThread implements Callable<String> {
    private String name;
    public CThread(String name ) {
        this.name = name;
    }
    //重写call()方法
    @Override
    public String call() throws Exception {
        return name;
    }   
}
/***********************************************************************/
//调用线程
//创建线程池
ExecutorService pool = Executors.newFixedThreadPool(5);
//创建接收结果的列表集合
List<Future> list = new ArrayList<Future>();
for(int i = 0;i<5;i++) {
//创建线程对象
Callable c = new CThread("线程"+i);
//将线程对象提交到线程池中,并将返回结果接收
Future future = pool.submit(c);
System.out.println("线程"+i+"已经加入线程池");
//将返回结果加入集合
list.add(future);
}
//关闭线程池
pool.shutdown();
//打印返回结果
for (Future future : list) {
    try {
        System.out.println(future.get().toString());
    } catch (InterruptedException | ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

4 基于线程池的execute(),创建临时线程

我们可以利用缓存策略使用线程池来创建线程

具体创建:

(1)创建线程池

(2)调用线程池的execute()方法

(3)采用匿名内部类的方法,创建Runnable对象,并重写run()方法

public class EThread {
    public static void main(String[] args) {
        //创建线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(10);
        for(int i = 0;i<10;i++) {
            //调用execute()方法创建线程
            //采用匿名内部类的方法,创建Runnable对象,并重写run()方法
            threadPool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName());   
                }
            });
        }
    }
}



相关文章
|
5月前
|
Java
线程的四种创建方式
线程的四种创建方式
|
5月前
线程间的同步的方式有哪些
线程间的同步的方式有哪些
|
5月前
|
Java API 调度
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
55 0
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
|
6月前
|
缓存 Java
线程池的7种创建方式(一)
线程池的7种创建方式
111 0
|
6月前
|
存储 安全 Java
线程池的7种创建方式(二)
线程池的7种创建方式
|
8月前
|
Java API 调度
线程的创建和使用
线程的创建和使用
31 0
|
10月前
|
消息中间件 Java
什么是线程和进程?是如何创建、同步、通信、销毁的?
什么是线程和进程?是如何创建、同步、通信、销毁的?
102 0
|
12月前
|
C++
线程的2种创建方式
当一个类继承了Thread类,该类就可以当作线程使用。 run方法其实是一个普通方法,是Runnable接口的一个方法。 Thread类也是进行了重写。 真正实现多线程的start方法中的start0方法。 这是一个本地native方法,由c/c++实现。
61 0
|
12月前
|
Java
线程和进程概念区别—及线程常用方法和状态
进程和线程是操作系统中的两个基本概念。 进程是程序执行的基本单位,每个进程都有自己独立的内存空间和系统资源,它拥有自己的虚拟地址空间、代码段、数据段、堆栈段等。一个程序可以对应多个进程,每个进程之间是独立运行的,互相之间不会影响。
131 0
|
设计模式 安全 Java
多线程的创建、线程的状态和调度and同步、join和yield以及单例设计模式的种类
多线程的创建、线程的状态和调度and同步、join和yield以及单例设计模式的种类
77 0