线程的四种创建方式

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

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



相关文章
|
17天前
|
安全 Java 调度
线程的四种创建方式
【10月更文挑战第22天】在多线程编程中,还需要注意线程安全、死锁等问题,以确保程序的正确性和稳定性。通过合理地运用线程创建方式和相关技术,我们可以充分发挥多线程的优势,提高程序的性能和并发处理能力。
|
2月前
|
缓存 C语言
线程的创建过程
【9月更文挑战第15天】线程是由内核和用户态协同实现的机制。`pthread_create` 函数在 Glibc 中定义,首先处理线程属性参数,如栈大小,默认值或传入值。每个线程有一个 `pthread` 结构来维护状态。创建线程时,需要分配线程栈,并进行以下操作:获取栈大小、设置保护区域、缓存管理、内存映射、栈初始化及保护、填充 `pthread` 结构并管理栈缓存。最终通过 `create_thread` 函数调用 `clone` 系统调用创建线程,共享进程数据结构
|
2月前
|
JavaScript 安全 前端开发
ArkTS线程中通过napi创建的C++线程
需要注意的是,N-API和ArkTS的具体使用会随Node.js的版本不断更新和变化,所以在实际编写代码前,查看最新的官方文档是很重要的,以了解最新的最佳实践和使用模式。此外,C++线程的使用在Node.js插件中应当慎重,过多地使用它们可能会造成资源争用,并可能降低应用程序的性能。
62 0
|
6月前
|
缓存 C语言
线程是如何创建的
【2月更文挑战第14天】
|
6月前
|
Java API 调度
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
76 0
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
|
6月前
线程间的同步的方式有哪些
线程间的同步的方式有哪些
|
缓存 Java
线程池的7种创建方式(一)
线程池的7种创建方式
160 0
|
存储 安全 Java
线程池的7种创建方式(二)
线程池的7种创建方式
|
缓存 Java 数据库连接
架构系列——线程实现方式到底是4种还是2种?(附带线程生命周期)
架构系列——线程实现方式到底是4种还是2种?(附带线程生命周期)
|
Java API 调度
线程的创建和使用
线程的创建和使用
54 0