进程与线程的认知强化

1.如何理解进程与线程安全? 

进程:操作系统进行资源调度和分配的基本单位(列入浏览器,app,jvm)

线程:进程中的最小执行单位(可以理解为一个顺序的执行流)。多个线程可以共享所属进程的所有资源。

2.如何理解多线程中的并行与并发

并发:多线程抢占cpu,不能同时执行,侧重于多个任务交替执行。

对于cpu来说,同一时间只可以干一件事情。为了实现同时多件是,分时操作将cpu划分位长短基本相同的时间片,通过操作系统的管理,把时间片依次轮流分配给各个线程任务使用,我们看似同时干多件事情,其实是通过cpu时间片技术并发完成的

并行:线程可以不共享cpu,可每个线程一个cpu同时执行多个任务

总之:并行只出现在多个cpu或多核cpu,并发是并行的一个子集

线程一与线程二 并发

线程一内部的处理1,处理2,处理3 并行

线程的生命周期及状态变化(5种线程状态+3种阻塞状态)

创建:新建进程,计算机为该线程分配对应的资源空间,并将线程转到就绪队列

就绪:排队等待cpu分配时间片的状态

执行:cpu分配了对应的时间片,运行。时间片结束转会就绪状态,如果发生了阻塞,无法执行,将转为阻塞状态

阻塞(3):因为某种原因处于运行的线程,放弃了cpu的使用权,只有阻塞解决了之后才会转为就绪状态重新排队等待

  1. 其他阻塞:调用线程的sleep(),join()或发出IO请求(主动引发的阻塞)
  2. 同步阻塞:调用公共资源时,该资源被锁定(被其他程序占用),转为阻塞状态
  3. 等待阻塞:运行状态的线程执行wait()方法,进入等待阻塞

终止:线程已经执行完或者异常退出了,该线程生命周期结束

实列

该测试中包含两个线程。main方法的主线程和定义的 Thread t子线程

在实际运行中,如果先执行完了main方法的主线程子线程没有执行,content没有被赋值,主线程的输出内容为空的content。会造成空指针异常

解决方法:

1.为主线程添加Thread.sleep(1000),主动让主线程休眠1000ms,给予足够的时间去调用子线程。缺点:会造成资源的浪费,也许子线程执行不需要1000ms,就会造成pc资源的浪费

2.加入t.join,主动让子线程 t 线程先执行。缺点:会直接将t线程全部执行完,执行完才会执行主线程。无法只要执行content赋值的语句,其他的部分不可以稍后执行。

 3.加入while(true)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sayhitoloverOvO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值