java创建多线程的四种方式

        java创建多线程有四种方式:1、继承thread类 2、实现runnable接口  3、实现callable接口   4、通过java的线程池获得。

一、继承thread类

最简单的方式: 

public class MyThread extends Thread {
    public void run(){
        System.out.println("Thread is running");
    }
}
 
// 使用
MyThread myThread = new MyThread();
myThread.start();

二、实现runnable接口

public class MyRunnable implements Runnable {
    public void run(){
        System.out.println("Runnable is running");
    }
}
 
// 使用
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();

三、实现callable接口 

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
 
public class MyCallable implements Callable<String> {
    public String call() throws Exception {
        return "Callable is running";
    }
}
 
// 使用
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
Thread thread = new Thread(futureTask);
thread.start();

 FutureTask是未来的任务,用它就干一件事,异步调用!!!

  1. 在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给Future对象在后台完成,当主线程将来需要时,就可以通过Future对象获得后台作业的计算结果或者执行状态。

  2. 一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。

  3. 仅在计算完成时才能检索结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。 

  4. 只计算一次,get方法放到最后

 Callable接口和Runnable接口的区别:(都是函数式接口)

  1. Callable方法是call()  Runnable是run()

  2. 前者需要抛出异常,后者不需要

  3. 前者有返回值后者没有返回值

四、通过java的线程池获得

 Java 创建线程池的几种方式_java创建线程池-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值