并发视频学习笔记(一)

线程与进程详解

目录

一、进程和线程的区别

1.区别:

2.关系

二、start和run方法的区别

1.区别

2.源码层面:

3.代码演示:

4.Thread和Runnable的关系

三、如何实现处理线程的返回值

1.如何给run()方法传参

2.如何实现处理线程的返回值

四、线程的状态

1.六个状态

2.其中的无限期等待

3.其中的限期等待

4.注意:已经结束的线程不能再次调用

五、sleep/wait  notify/notifyAll

1.sleep/wait

2. notify/notifyAll

五、如何中断线程

1.抛弃的方法

2.目前使用

六、线程状态以及状态之间的转换


一、进程和线程的区别

1.区别:

 

2.关系


二、start和run方法的区别

1.区别

2.源码层面:

Thread 继承 Runnable 接口

Runnable接口里面包含run抽象方法

因此使用Thread总是要重写run方法;

3.代码演示:

(1)使用extends Thread

多线程交替执行:

(2)使用implements Runnable

没有start方法

只有使用new Thread(Runnable)才会有start方法

4.Thread和Runnable的关系

Runnable的 优势,只要类都去继承他,就可以有很好的复用性


三、如何实现处理线程的返回值

1.如何给run()方法传参

2.如何实现处理线程的返回值

(1)主线程等待法

缺点是需要自己写,并且不知道具体需要等待多久

(2)join

Join的缺点是粒度不够细

(3)通过线程池


四、线程的状态

1.六个状态

2.其中的无限期等待

3.其中的限期等待

4.注意:已经结束的线程不能再次调用


五、sleep/wait  notify/notifyAll

1.sleep/wait

(1)基本差别

(2)本质差别

注:

Sleep和wait除了可以通过设定执行时间,当时间到达时释放锁(不设置时间是无限等待)也可以通过notify和notifyall来唤醒

2. notify/notifyAll

(1)EntryList和WaitSet

(2)notify/notifyAll的区别

(3)yield

->他不会对锁的状态造成印象


五、如何中断线程

1.抛弃的方法

2.目前使用

 


六、线程状态以及状态之间的转换

 

通过实现runnable接口,或者继承Thread可以得到一个线程类,通过new一个实例,线程就进入到了new状态,也就是新建的状态,此时调用start方法,此线程即进入可运行(runnable)的状态,若处于该状态的线程被OS选中,并获得了时间片之后,就会进入到running的状态。

刚刚我们注意到,程序里面打印,并没有区分runnable和running这两个状态,所以running的状态仅仅是逻辑上的划分,如果running状态的线程一旦调用的yield方法,则可能让出cpu回到runnable的状态,当然这取决于操作系统的调度,yield只是起到了一个建议的状态。而如果时间片用完了,但是线程还没有结束,也会进入到可运行的状态。

如果处于running状态的线程如要要等待用户的IO输入,或者调用sleep方法之后,则会进入阻塞状态,此时只会让出CPU,如果当前线程已经获得锁,上述情况不会对锁的状态造成影响,不会释放已经获得的锁。

此外,处于runnable或者running状态的线程,执行synchronized方法,或者方法块的时候,发现并未获取到相应的锁,也会进入到阻塞的状态,同时会被放入到锁对象的锁池当中。在其所处的领域内只能有一个线程来执行。

而如果处于运行中的线程,调用了wait的方法,就会进入到限期或者非限期的等待状态,同时会被放入到锁对象的等待队列当中,处于等待队列中的线程,如果wait的时间到了,或者被其他线程调用notify、notifyAll,则会被放入到锁池,之后位于锁池的线程一旦获得了锁,则再次进入到runnable的状态,等待OS选中后会回到运行,即running的状态。

最后,处于running状态的线程在方法执行完毕或者异常退出之后,线程就会结束,进入到terminative的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IMUHERO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值