java多线程——实现方法

本文介绍了Java中实现多线程的四种主要方法:继承Thread类、实现Runnable接口、实现Callable接口并结合Future,以及使用ExecutorService接口进行线程池管理。通过具体示例展示了不同方法的特点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 继承thread;

Thread类是Runable接口的一个实例,然后用start方法来启动一个新线程来跑重写的run方法。

2. 实现接口runnable;

当我们写的类本身就有extend,继承的父类的时候,那么我们就可以用实现接口Runnable。到时候只需要对此类进行实例化,然后传到实例化的线程Thread里,最后启动线程就可以调用此类重写的run方法。
例子:

//实现接口Runnable
public class MyThread extends OtherClass implements Runnable {  
  public void run() {  
   System.out.println("MyThread.run()");  
  }  
}  
//启动线程
MyThread myThread = new MyThread();  
Thread thread = new Thread(myThread);  
thread.start();  

查看Thread API发现还有其他的构造方法。

  1. public Thread(Runnable target)
    分配新的 Thread 对象。这种构造方法与 Thread(null, target,gname) 具有相同的作用,其中的 gname 是一个新生成的名称。自动生成的名称的形式为 “Thread-”+n,其中的 n 为整数。
  2. public Thread(ThreadGroup group,Runnable target)
    分配新的 Thread 对象。这种构造方法与 Thread(group, target, gname) 具有相同的作用,其中的 gname 是一个新生成的名称。自动生成的名称的形式为 “Thread-”+n ,其中的 n 为整数。
  3. public Thread(String name)
  4. public Thread(ThreadGroup group,String name)
  5. public Thread(Runnable target,String name)

3. 实现接口Callable

和Future,线程池结合使用;
区别于runable

  1. callable 规定的方法是call()带返回值,runable规定方法是run()不带返回值
  2. call()方法可抛出异常,run()方法不可抛出
//例如:
class ThreadDemo implements Callable<Integer> {
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i <= 100000; i++) {
            sum += i;
        }
        return sum;
    }
}

		ThreadDemo td = new ThreadDemo();
        //执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。
        FutureTask<Integer> result = new FutureTask<>(td);
        new Thread(result).start();

4. 结合使用executorservice

executorservice接口
public interface ExecutorServiceextends Executor

超级接口:Executor(注意不是Executors)
子接口:ScheduledExecutorService
实现类:AbstractExecutorService,ThreadPoolExecutor,ScheduledThreadPoolExecutor

在这里插入图片描述
参考:https://blog.youkuaiyun.com/suifeng3051/article/details/49443835

ExecutorService的执行
execute(Runnable)

接收Runnable实例,并且异步执行,但是不能获取task的执行结果。

submit(Runnable)

可以返回一个future对象,可以检查提交的任务是否执行完毕

submit(Callable)

有返回值,返回任务执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值