并发编程笔记

1.上下文切换

CPU通过给每个线程分配CPU时间片来实现多线程的机制。由于时间片非常短,所以cpu通过不断的切换线程来让我们感觉是多个线程正在同时执行。当切换线程的时候cpu会保存上一个任务的状态,以便切换回这个任务的时候,可以加载这个任务的状态。因此任务从保存到再加载的过程就是一次上下文切换。

减少上下文切换的方法:

无锁并发编程、CAS算法、使用最少线程、使用协程

Volatile 的实现原则

1)Lock前缀指令引起处理器缓存写回到内存  该过程处理器可以独占任何共享内存,原因是会锁住总线或者缓存锁

2)一个处理器的缓存回写到内存会导致其他处理器的缓存无效。  其它处理器通过嗅探在总线上传播的数据检查是不是过期了。过期则设置为无效状态,当处理器对这个数据进行修改操作的时候会重新从系统内存中读到处理器缓存中。

大概就是耍流氓,自己把数据锁了,还要求别人使用的时候都得跟自己一样。

Synchronized

普通同步方法 锁是当前实例对象。

静态同步方法  锁是当前类的Class对象

同步方法块  锁是Synchonized括号里配置的对象

在JVM中,代码块同步是基于进入和退出Monitor对象来实现。 通过monitorenter和monitorexit指令实现的。任何对象都有monitor与之关联,当被持有后就获得对应的monitor所有权。

待续...

猜你喜欢

转载自www.cnblogs.com/helloDuo/p/9445631.html