JavaEE——进程和线程的概念和区别

 目录

一、进程和线程的概念和区别

二、如何在代码中编写多线程程序

三、如何查看线程的状态

 

1.线程是什么

一个线程就是一个"执行流",每个线程之间都可以按照顺序执行自己的代码,多个线程之间"同时"执行
着多份代码

1.2为什么要有线程

首先,"并发编程"成为"刚需".
单核 CPU 的发展遇到了瓶颈.要想提高算力,就需要多核 CPU.而并发编程能更充分利用多核 CPU
资源.
有些任务场景需要"等待 10",为了让等待 10 的时间能够去做一些其他的工作,也需要用到并发编程
其次,虽然多进程也能实现 并发编程,但是线程比进程更轻量
创建线程比创建进程更快,
销毁线程比销毁进程更快
调度线程比调度进程更快

最后,线程虽然比进程轻量,但是人们还不满足,于是又有了"线程池"(ThreadPool)和"协程'
(Coroutine)

1.3进程和线程的概念和区别

(1)进程包含线程,一个进程里可以有一个线程,也可以有多个线程,不能没有线程

(2)进程是系统资源分配的基本单位,线程是系统调度执行的基本单位

(3)同一个进程里的线程之间,共用同一份系统资源(内存,硬盘, 网络带宽等....),尤其是"内存资源”,就是代码中定义的变量/对象编程中,多个线程,是可以共用同一份变量的

(4)线程是当下实现并发编程的主流方式,通过多线程, 就可以充分利用好多核 CPU。但是,也不是线程数目越多,就越好,线程数目达到一定程序,把多个核心都利用充分了之后,此时继续增加线程,无法再提高效率,甚至可能会影响效率 (线程调度,也是有开销的)

(5)多个线程之间,可能会相互影响,线程安全问题,一个线程抛出异常,也可能会把其他线程也一起带走

(6)多个进程之间,一般不会相互影响.一个进程崩溃了,不会影响到其他进程,(这一点也成为"进程的隔离性”)

2.1如何在java代码中写多线程程序

(1)线程,本身是操作系统提供的概念,操作系统提供 API, 供程序员调用,不同的系统,提供的 API 是不同的. (Windows 创建线程的 API 和 Linux, 差别非常大)
(2)Java (JVM) 把这些系统API封装好了,咱们不需要关注,系统原生 API, 只需要了解好 Java 提供的这一套 API 就行了

(3)Thread 标准库,在java中这个类就负责完成 多线程 相关的开发

这里我们运用继承Thread类写一个简单的模板

 接下来我们完善这个代码并运行

运行结果:

在补全这个代码和运行时的补充事项:

(1) 在写sleep会报错

此处是重写父类的 run ,但父类人家 run没有 throws 这样的异常声明子类重写的时候,也就不能增加 throws

 (2)多个线程之间,谁先去 CPU 上调度执行, 这个过程是"不确定的"

(不是数学意义的随机),而是这个调度顺序,取决于操作系统, 内核里,"调度器"的实现,调度器里,有一套规则, 但是咱们作为应用程序开发,没法进行干预,也感受不到,只能把这个过程近似的视为"随机" 

(3)注意:上述代码中,run 方法, 并没有手动的去调用,但是最终也执行了,像 run 这种,用户手动定义了,但是没有手动调用,最终这个方法被系统/库/框架进行调用了此时这样的方法, 就称为"回调函数"(callback) 

3.1如何查看线程状态

(1)找到所下载的jdk文件

(2) 双击该文件找到

(3)在双击bin找到

(4)打开该文件选择Java程序中的类名

(5) 点不安全连接

(6)就可以查看到线程状态了

注意:

(1)main:代码主线程

一个 Java 进程中, 不止是有 2 个线程,其实还有别的,代码中 t.start() 创建的线程的线程命名的规律就是 Thread-数字 

(2)

 调用栈,描述了,函数之间/方法之间 调用关系。调用栈,非常有用的东西
比如,你的代码出问题了,抛出异常,进程终止了(崩溃了),此时,查看对应的调用栈,就能知道是哪个代码的哪一行,语句,出现了问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值