【JavaEE学习日记】----多线程基础(上)

目录

💗1.什么是线程?

💗2.有了进程为什么要有线程?

☁️2.1.

☁️2.2.并发(Concurrent)编程

💗3.经典面试题:进程和线程的区别? 

💗4.Java的线程和操作系统的线程有什么区别

💗5.第一个多线程程序

💗6.五种创建线程的方法

🐔创建一个子类继承Thread

🐛创建一个类实现Runnable

🐞使用匿名内部类

🐠使用匿名内部类

🐏使用lambda表达式

 💘7.多线程的优势

💘8.Thread类及其常见方法 

⚡8.1.Thread的常见构造方法

⚡8.2.Thread常见属性

💘9.Thread常用的一些方法

💘10.中断线程

①使用标记位

②使用Thread类自带的标记位

 💘11.等待一个线程 join()

💘12.获取当前线程的引用

💖13.线程休眠 sleep

💕💕💕💕💕💕💕💕💕💕💕💕💕💕分隔符💕💕💕💕💕💕💕💕💕💕💕💕💕💕💕

💗1.什么是线程?

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

简单来说线程是包含在进程内部的,就相当于一个工厂,这个工厂就相当于进程,工厂里面有许多的流水线,这个流水线就相当于线程

💗2.有了进程为什么要有线程?

☁️2.1.

①进程一个时间只能干一件事,如果想进程一个时间干很多事,那么进程也无能为力

②许多进程一起工作时,如果有一个进程挂了,可能会影响其他的进程,这是非常不利的

举个例子:我们炒一道菜的时候需要很多的步骤,例如炒土豆丝,首先需要清洗,然后去皮,在进行浸泡,最后在下锅,需要很多的步骤,想要在短时间内把这道菜做出来是不太可能的,如果有个东西能帮你分担这些事,你就不会这么的手忙脚乱了,这个东西就叫做线程

以上这个例子我们就能清楚的知道线程的好处

☁️2.2.并发(Concurrent)编程

随着硬件性能的迅猛发展与大数据时代的来临,并发编程日益成为编程中不可忽略的重要组成部分。简单定义来看,如果执行单元的逻辑控制流在时间上重叠,那它们就是并发(Concurrent)的。并发编程复兴的主要驱动力来自于所谓的“多核危机”

①单核CPU的发展遇到了瓶颈,想要提高算力,就需要多核CPU,而并发编程能更充分的利用多核CPU的资源

②有些任务用到了等待 IO ,为了让等待IO的时间能做其他的事情,也就需要用到并发编程

对于并发编程,虽然多进程也能实现,但是多线程比多进程更轻量

💦创建线程比创建线程更快

💦销毁线程比销毁进程更快

💦调度线程比调度进程更快 

虽然线程比进程更轻量,但是人们还是不满足,于是又有了“线程池” 和 “协程”(此处不过多介绍)

💗3.经典面试题:进程和线程的区别? 

⭐线程是包含在进程里面的,每一个进程至少包含一个线程,即主线程

⭐和进程之间不共享内存空间,而线程之间是共享一个内存空间的

⭐进程是系统分配资源的最小单位,而线程是系统调度的最小单位

⭐线程和进程都是为了实现并发编程,而线程相比较于进程更加的轻量

1.创建线程比创建线程更快

2.销毁线程比销毁进程更快

3.调度线程比调度进程更快 

💗4.Java的线程和操作系统的线程有什么区别

⭐线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使用❗

简单介绍一下内核:

现代操作系统都采用进程的概念,为了更好的处理系统的并发性、共享性等,并使进程能够协调地工作,仅依靠计算机硬件提供的功能是远远不够的。例如,进程的调度就不能用硬件来实现,必须使用一组基本软件对硬件资源进行改造,以便为进程的执行提供良好的运行环境,这个软件就是内核(kernel)。

简单来说,内核就是操作系统中的一组程序模块,作为可信软件来提供支持进程并发执行的基本功能和基本操作,具有访问硬件设备和所有内存空间的权限。不夸张的说,内核是操作系统的核心。 

🐍Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装 ❗

Java 线程和操作系统的线程有啥区别? - 云+社区 - 腾讯云 (tencent.com)

💗5.第一个多线程程序

class Mythread extends Thread{
    @Override
    public void run() {
        System.out.println("the first thread");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();
    }
}

☀️具体分析:

@Override
    public void run() {
        System.out.println("the first thread");
    }

重写了Thread里的run方法,里面的代码就表示这个线程具体要干什么,这里相当于安排任务,病是不是说这里的代码一写出来就可以执行这个线程

thread.start();

start方法是真正的创建出线程的方法,只有调用了start方法,线程才能被创建出来,上面重写的run方法也才能被执行


💗6.五种创建线程的方法

🐔创建一个子类继承Thread

class Mythread extends Thread{
    @Override
    public void run() {
        System.out.println("the first thread");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();
    }
}

🐛创建一个类实现Runnabl

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

w-ib

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

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

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

打赏作者

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

抵扣说明:

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

余额充值