Java | 多线程

不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!


🌴前言

本文内容是关于多线程的知识,包括使用Java实现多线程的三种方式。


🌴一、什么是多线程?

1.进程

进程是程序的基本执行实体。

在这里插入图片描述

2.线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程的实际运作单位。
例:电脑管家是一个进程,其中垃圾清理和病毒查杀就是线程。

若是应用软件中有多个互相独立,可以同时运行的功能,那么就叫做多线程。

3.多线程作用

可以让程序同时做多件事情,提高效率。


🌴二、多线程中的两个概念

1. 并发

在同一时刻,有多个指令在单个CPU交替执行。

2. 并行

在同一时刻,有多个指令在多个CPU同时执行。

3.举例

以2核4线程为例,如果同时打开了四个线程,那么此时状态为并发,如果打开了超过四个线程,那么此时会随机切换线程,并发和并行状态共存。


🌴三.多线程的实现方式

1.继承Thread类

  1. 自己定义一个类继承Thread
  2. 重写run()方法
  3. 创建子类的对象,并启动线程

定义一个类

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是" + getName());
        }
    }
}

启动线程

public class ThreadDemo {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();

        t1.setName("线程一");
        t2.setName("线程二");

        t1.start();
        t2.start();
    }
}

2.实现Runnable接口

  1. 自己定义一个类实现Runnable接口
  2. 重写run()方法
  3. 创建自己的类的对象
  4. 创建一个 Thread类的对象,并开启线程

定义一个类

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是" + Thread.currentThread().getName());
        }
    }
}

启动线程

public class RunnableDemo {
    public static void main(String[] args) {
        MyRunnable mr = new MyRunnable();

        Thread t1 = new Thread(mr);
        Thread t2 = new Thread(mr);

        t1.setName("线程一");
        t2.setName("线程二");

        t1.start();
        t2.start();
    }
}

3. 利用Callable接口和Future接口

  1. 自己定义一个类MyCallable实现Runnable接口
  2. 重写call()方法(有返回值,表示多线程运行的结果)
  3. 创建MyCallable的对象(表示多线程要执行的任务)
  4. 创建FutureTask的对象(作用管理多线程运行的结果)
  5. 创建一个 Thread类的对象,并启动线程

定义一个类

public class MyCallable implements Callable<Integer> {
    int sum = 0;
    @Override
    public Integer call() throws Exception {
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }
}

启动线程

public class ThreadDemo2 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc = new MyCallable();
        FutureTask<Integer> ft = new FutureTask<>(mc);
        Thread t = new Thread(ft);
        t.start();
        System.out.println(ft.get());
    }
}

4. 三种实现方式的对比

在这里插入图片描述

🌴总结

文章中代码的编写使用的都是Java线程的知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱生姜不吃醋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值