Java多线程基础

如你们所知,想在java行业拿到高薪,多线程是个必须熟练的技能,可是入门费劲,故最近搜集关于多线程的资料,做如下总结。

1.锁有哪些实现。

jdk1.5之前有synchronized,jdk1.5+后有ReentrantLock,ReentrantReadAndWriterLock,countDownLatch,CycliBarrier。

2.线程启动过程分析

线程的启动,大家都知道是start,这时候线程会向内存申请一些资源准备(线程工作栈所需要的内存等),然后等待cpu空闲下来调度,这时候会执行run,直到线程销毁。

3.线程内存模型

线程有工作空间,有线程工作变量,线程A变量修改了,线程B并不能读到修改的值,只有当线程A把工作变量刷到共享内存变量,才能共享给B,谈到这里就不得不提一下volatitle,volatitle修饰的变量,会把线程工作变量强刷到共享内存,这样就能保证其他线程读到最新的变量了。

4.线程上下文切换

众所都知,线程执行的效率靠的是cpu的调度,当线程没有执行完,或是sleep,或是wait,cpu需要记住此刻的线程变量等上下文,然后切换执行其他线程,当再次切换回来的时候,需要根据线程上下文继续未完的步骤,所以线程越多,cpu越忙,导致cpu狂飙100%

5.wait,sleep区别

wait 线程会堵塞,释放锁,让出cpu,等待notify,notifyall唤醒。

sleep线程会休眠一段时间,不释放锁,让出cpu调度其他任意优先级的等待调度的线程。

6.yield, join区别

yield会让线程让出cpu给另外一个同样优先级的线程。join是让其他线程等待当前线程执行完。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容