并发编程的基本知识(一)

一、进程和线程

1、概念

进程:操作系统进行资源分配的最小单位,资源包括:cpu、内存、io

线程:程序运行的最小单位

2、区别

线程切换效率更高,所以对于java项目的开发,一般多是多线程

二、CPU时间片轮转机制

1、概念

cpu会把运行的时间分割成时间片,对于单核多线程来说,每个线程都会占用自己的时间片,当时间片用完之后,该线程挂起,然后切换下次个线程,以此往复。

2、现象

正是因为cpu时间片轮转机制的存在,所以就算是单核的cpu,也可以实现多线程。

三、并行和并发

1、概念

并行:多个任务同时进行

并发:单位时间内,并发量的多少,多个任务交替着执行

四、并发编程的好处

1、实现了资源的高效利用

2、加快了用户的响应速度

3、实现了模块的模块化

五、中断

1、背景

由于使用stop方法停止线程非常暴力,可能会导致一系列问题。因此,提出一种温和的方式:请求另外一个先不要在执行了,这就是中断方式

2、interrupt()、isInterrupted()、interrupted()

interrupt():中断调用该方法的线程

isInterrupted():检测调用该方法的线程是否被中断,中断状态不会被清除。

interrupted():检测当前线程是否被中断,并且中断状态会被清除(即重置为false),此方法是警惕方法

六、join方法

将指定的线程加入到当前线程,实现线程的顺序执行

七、Threadlocal

1、概念

threadlocal提供了对象的副本,实现了隔离性。synchronized通过锁机制实现了了同一时间只能有一个线程访问同一对象

2.实现原理

1、获取当前的线程对象

2、通过当前线程对象获取对象属threadlocals(其实是一个threadlocalmap(key为threadlocal,value值为副本))

3、通过get()/set()/remove()方法能够对threadlocalmap中key值为null的value值进行清除

4、当该副本不使用时,挑用remove()方法进行资源的释放,防止内存泄露,甚至内存溢出

注意:threadlocalmap中的key为弱类型,当gc进行拉进回收的时候,key被回收。当下次调用get()/set()/remove()方法时,会自动清理key为null的value。如此一来,value也能被回收了,防止出现内存泄露

参考文档:https://blog.youkuaiyun.com/puppylpg/article/details/80433271

八、wait和notify

等待通知的标准范式:

等待方遵循的原则:

synchronized(对象){
	while(满足的条件){
		对象.wait();
	}
	对应的逻辑处理
}

通知方遵循的原则:

synchronized(对象){
	条件改变
	对象.notifyAll;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值