多线程系列二之认识线程

多线程系列二之认识线程

提示:本文主要讲述了进程和线程的关系,认识并创建了线程。

一、进程

1) 引入进程的目的

我们引入进程是为了解决并发编程问题,然而随着CPU进入多核时代,要想提高程序的利用效率,必须要充分利用CPU的资源,才能提高程序的执行速度。

2) 进程的缺点

进程的最大一个缺点就是太重,我们这里所说的重指的是在资源分配和回收上。
创建一个进程,开销比较大
销毁一个进程,开销比较大
调度一个进程,开销也是比较大的
3.线程
因此,线程应运而生,线程又叫做“轻量级进程”
线程相比于进程更加轻
因为他把申请和释放资源的步骤省去了。

3) 下面举一个面包厂的例子

在这里插入图片描述
如果这个面包生意很好要扩大生产,他有两种方法
第一种方法

再搞一个相同的生产线

在这里插入图片描述
第二种方法

在这里插入图片描述

对比这两种方法,我们就可以更加清晰的理解为什么线程比进程更加轻量,因为他把申请和释放的资源省下了,也就提高了程序的执行速度。

二、线程

1) 进程与线程的关系

1.进程包含线程
2.一个进程可以有一个线程,一个进程也可以有多个线程。
3.只有第一个线程时候开销比较大,后续线程都很快
4.进程是操作系统进行资源分配的基本单位
5.线程是操作系统进行调度执行的基本单位

1.一个线程可以通过一个PCB来描述
2.因此一个进程里面可以包含一个PCB,也可以对应多个PCB。
3.处于一个进程里面的很多线程,他们的pid 内存指针和文件描述符表都是一样的
4.不同进程的pid是不同的
5.处于一个进程里面的很多PCB,他们的状态、上下文、优先级、记账信息都是不一样的
在这里插入图片描述

2) 多线程的安全问题

1.为什么会有线程安全问题?
简而言之,就是多个执行流,访问同一个共享资源问题的时候,会触发线程安全问题。
2.
进程:
进程模型,天然资源是隔离的,不容易除服,只有进程间进行相互通信访问公共空间时候,可能会触发安全问题。
线程:
线程模型,天然就是资源共享的,很容易造成多个线程争抢同一个资源,这个时候就会可能触发线程安全问题。
3.另外 关于线程本身的操作,操作系统都提供了API,操作系统提供的很多功能都被JVM给封装好了,因此我们并不用学习操作系统原生的API,只需要学习Java提供的API即可。

三、创建一个多线程

1) Thread

1.关于多线程编程最核心的一个类就是Thread
2.Thread类不需要导入包,因为这个类就在java.lang下面
在这里插入图片描述

1.在main方法 也就是主线程里, Thread t 线程对象,但是这个时候还没有创建线程PCB
2.t.start()这个方法创建了一个线程PCB;这个方法就是调用了操作系统的API在操作系统内核里创建了一个新的线程PCB,并且把要执行的指令交给这个线程
3.当操作系统被调度到CPU上执行的时候,也就执行了run方法
4.当这个run方法执行完毕后,这个线程就被销毁了。

main线程与t线程谁先执行
由于操作系统调度线程,是抢占式执行,随机调度,所以并不能确定谁先执行。操作系统内核本身并不是随机的,但是在应用程序这一栏作为程序猿我们无法感知到。

2) start与run

start方法:start方法是真正的从操作系统内核中创建了一个线程PCB(只有PCB才是货真价实的线程,线程对象t并不算线程的创建)

run方法:run方法只是描述了一个线程要执行的任务,如果在main方法里调用run,此时并没有创建新的线程,活都是main方法一个人在干!!!

3)jconsole的使用

1.我们可以i使用jconsole查看当前正在运行的线程,还可以观察到线程的运行状态。
2.在jdk的bin目录下可以找到jconsole
在这里插入图片描述
点击运行
在这里插入图片描述
点击连接
在这里插入图片描述
我们可以利用jconsole观察线程的运行状态。

  • 43
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值