首页 > 其他分享 >多线程

多线程

时间:2024-08-21 20:39:27浏览次数:13  
标签:Thread Callable 线程 FutureTask new 多线程 public

1 多线程创建方式

1.1 继承Thread类,重写run()方法

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Running in thread: " + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // 启动线程
    }
}

1.2 实现Runnable接口,重写run()方法

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Running in thread: " + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start(); // 启动线程
    }
}

1.3 实现Callable接口,重写call()方法

能够获取返回结果

在Java 5中引入了一种新的创建线程的方式,即使用FutureTask结合Callable接口。这种方式允许从线程中返回一个结果,并且可以通过Future接口来获取这个结果。
步骤

  • 实现Callable接口:
    • 创建一个类实现Callable接口。
    • 实现call方法,该方法的返回值就是线程执行的结果。
  • 创建FutureTask对象:
    • 使用Callable对象创建一个FutureTask对象。
  • 创建并启动线程:
    • 使用FutureTask对象创建一个Thread对象。
    • 调用Thread对象的start方法来启动线程。
  • 获取线程返回值:
    • 调用FutureTask对象的get方法来获取线程执行的结果。
    • get方法会阻塞当前线程直到Callable的call方法执行完毕。
public class FutureTaskExample {

    public static void main(String[] args) throws Exception {
        int n = 100;
        // 创建Callable对象
        MyCallable myCallable = new MyCallable(n);

        // 创建FutureTask对象
        FutureTask<Integer> futureTask = new FutureTask<>(myCallable);

        // 创建Thread对象并将FutureTask作为run方法的参数
        Thread thread = new Thread(futureTask);

        // 启动线程
        thread.start();

        // 获取线程的返回值
        Integer result = futureTask.get();
        System.out.println("The sum is: " + result);
    }
}

class MyCallable implements Callable<Integer>{
    private final int n;
    public MyCallable(int n) {
        this.n = n;
    }
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum += i;
        }
        return sum;
    }
}

标签:Thread,Callable,线程,FutureTask,new,多线程,public
From: https://www.cnblogs.com/sherioc/p/18372455

相关文章

  • 线程与进程的区别(多进程与多线程)
    线程与进程的区别(多进程与多线程)资源:进程采用虚拟空间+用户态/内核态机制,所以就导致进程与进程之间是互相独立的,各自的资源不可见。在同一进程中的各个线程都可以共享该进程所拥有的资源。多进程之间资源是独立的,多线程之间资源是共享的。通信:由于进程之间是互相独立的,需......
  • [JAVA]创建多线程的三种方式与区别
    继承Thread类创建线程实现Runnable接口创建线程Callable接口创建线程要学习创建线程,我们要通过代码来演示,这里我们可以通过实现以下参赛者跑步的场景来展开。模拟以下场景                              模拟10......
  • 在.NET应用中,使用Parallel类可以显著提高多线程环境下的执行效率
    在.NET应用中,使用Parallel类可以显著提高多线程环境下的执行效率,特别是当你需要并行执行多个不依赖彼此的任务时。Parallel类位于System.Threading.Tasks命名空间中,它提供了一系列静态方法,如Parallel.For、Parallel.ForEach和Parallel.Invoke,以支持并行循环和并行执行任务。1.......
  • tcp多个客户端访问服务端,运用多线程
    客户端packagecom.shujia.day20.tcpdemo3;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.Scanner;/*1:建立客户端的Socket服务,并明确要连接的服务器。2:如果连接建立成功,就表明,已经建立了数据传输的通......
  • 多线程基础知识(一)
    多线程多线程​ 进程:正在运行的程序,是系统进行资源分配和调用对的独立单位,每一个进程都有它的内存空间和系统资源。可以理解为,一个正在运行的程序。​ 线程:是进程中的单个顺序控制流,是一条执行路径,一个进程如果只有一条执行路径,则称为单线程程序;一个进程如果有多条执行路径,则称......
  • 多线程概念
    packagecom.shujia.day19;/*多线程:进程:正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。理解:一个正在运行的软件线程:是进程中的单个顺序控制流,是......
  • @Async使用ThreadPoolTaskExecutor 多线程
    SpringBoot中的线程池ThreadPoolTaskExecutor,@Async的使用线程池@Configuration@EnableAsyncpublicclassExcutorConfig{@Bean(name="ThreadPoolTaskExecutor")publicThreadPoolTaskExecutorThreadPoolTaskExecutor(){ThreadPoolTaskExecutorex......
  • C++中的多线程编程和锁机制
    二、多线程、锁2.1C语言线程库pthread(POSIXthreads)2.2.1线程创建pthread_create#include<pthread.h>pthread_tthread;ThreadDataargs={1,"Hellofromparameterizedthread"};intresult=pthread_create(&thread,attr,function,args); //线程创建即......
  • JavaEE篇:多线程(1)
    一认识线程(Thread)1.1概念1.1.1线程是什么?线程被创建出来是为了完成分配给它的任务。线程又称轻量级进程,是操作系统的基本调度单位。一个线程就是一个执行流。线程的创建销毁和切换都比进程更加的方便。进程是操作系统分配资源的基本单位,线程的创建和释放不涉及资源分配......
  • Thread-多线程
    多线程并发与并行(了解)并行(parallel):指多个事件任务在同一时刻发生(同时发生)。指在同一时刻,有多条指令在多个处理器上同时执行。单核CPU同一时刻只能处理一条指令,所以单核CPU做不到并行处理。并发(concurrency):指两个或多个事件在同一个微小的时间段内发生。指在同一个时刻只能有一......