【2023.5.27】Java多线程三种实现方式

本文介绍了Java中实现多线程的三种方式:通过继承Thread类、实现Runnable接口以及使用Callable接口结合FutureTask。线程是进程中的执行单位,并发与并行则分别对应单CPU的交替执行和多CPU的同步执行。示例代码展示了如何启动和管理线程,以及如何从Callable线程获取返回值。
摘要由CSDN通过智能技术生成

一些概念性内容:

①进程和线程:进程代表一个软件的运行;线程是进程中的实际运作单位,是软件中互相独立,可以同时运行的功能。 

②并发和并行:单个CPU上交替执行指令为并发;多个指令在多个CPU上同时执行为并行


多线程的实现:

①继承Thread类:重写run方法即可用start开启线程。

class Mythread extends Thread {//继承Thread类

    public void run() {//重写run方法
        /*在run方法里书写线程要执行的代码即可*/
        for (int i = 0; i < 99; i++) {
            System.out.println(getName() + "执行");
        }
    }
}
public class Main{
    public static void main(String[] args){
        Mythread t1 = new Mythread();
        Mythread t2 = new Mythread();
        t1.setName("线程1");
        t2.setName("线程2");
        t1.start();//start表示开启线程
        t2.start();

    }
}

运行结果:线程1、2交替执行。

代码相对简单,无法再继承其他类。而后两种可以再继承其他类。


②Runnable接口:重写run方法,分别创建Runnable和Thread两个对象开启线程。

class Myrun implements Runnable {//Runnable接口

    public void run() {//重写run方法
        /*在run方法里书写线程要执行的代码即可*/
        for (int i = 0; i < 99; i++) {
            System.out.println("执行");
        }
    }
}
public class Main{
    public static void main(String[] args){
        Myrun mr = new Myrun();//先创建Runnable对象
        Thread t1 = new Thread(mr);//再创建Thread对象
        t1.start();//start表示开启线程
    }
}

总结:不用再继承Thread类,但要多创建一个对象。


③Callable接口和Future接口:重写call,分别创建Callable和Future、Thread对象。

import java.util.concurrent.Callable;//必须有这一句
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
class MyCallable implements Callable<Integer> {//Callable接口

    public Integer call() throws Exception {
        /*在run方法里书写线程要执行的代码即可*/
        int A = 1000;
        return A;//该方法需要返回值
    }
}

public class Main{
    public static void main(String[] args) throws ExecutionException ,InterruptedException{
        MyCallable mc = new MyCallable();//先创建Callable对象
        FutureTask<Integer> ft = new FutureTask<>(mc);//再创建FutureTask对象
        Thread t1 = new Thread(ft);
        t1.start();//start表示开启线程
        //获取线程运行结果
        Integer result = ft.get();
        System.out.println(result);
    }
}

可以获取到多线程的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值