Java 多线程篇

java 线程状态

https://www.cnblogs.com/nongzihong/p/10512822.html(线程的状态)

https://www.cnblogs.com/chaguang/p/7818456.html(操作系统线程结构)

1.线程start方法执行后,并不表示线程运行了,而是进入就绪状态,什么时候运行由操作系统决定

2.运行的线程,也可能由于失去CPU回到就绪,操作系统线程调度让线程失去CPU,或程序调用yield

3.线程运行完毕、运行一半异常、主动调用stop方法,就进入死亡

4.下面几个行为,会引起线程阻塞:

  • 主动调用sleep。时间到了进入就绪
  • 主动调用suspend方法。主动调用resume方法进入就绪
  • 调用了阻塞IO方法。调用完成后,就入就绪
  • 试图获取锁。成功获取到锁之后,进入就绪
  • 线程等待某个通知。其他线程发出通知,会进入就绪状态

 

 

线程通信

  • while 循环来检查莫已条件,缺点:浪费CPU资源
  • wait/notify 机制

调用某个对象的notify()方法阻塞当前线程,并且当前线程必须拥有此对象的monitor锁

  • Condition 类似于Object的wait()/notify(),配合Lock使用;使用await()/signal()方式更加安全和高效的实现线程协作。

 

 

 

 

java 线程通信:wait/notify join ,Condition 生产者、消费者 ,线程通信管道

java 并发模型

线程池实现原理:

 

 

 

 

java 内存模型

https://www.jianshu.com/p/15106e9c4bf3

http://developer.51cto.com/art/201807/579744.htm(终于有人吧java内存模型讲清了)

定义:java内存模型(java memory model ,JMM)是java虚拟机规范定义的,用了屏蔽调java程序在不同的硬件和操作系统对内存访问的差异,确保在不同平台对内存访问的一致性。

 

面临的问题:CUP运行速度与硬件的差异(IO,网络、内存),多核时数据的一致性、正确性等问题。

 

 

 

问题:CPU与缓存一致性、处理器优化、指令重排

计算机内存模型定义:定义了多线程对共享内存的读写规范

java内存模型:java语言实现的, (java语言是跨平台,所以还屏蔽的不同硬件与操作系统的差异)

java内存模型的内容:

1.所有数据都存储在主内存,线程又自己的工作内存

2.工作内存保存了线程用到的主内存副本拷贝,线程对变量的所以操作都在工作内存中进行

3.不同线程无法访问对方工作内存,数据传递需通过住内存

(工作内存与主内存之间数据同步过程)

 

java内存模型实现:volatil,syn,final,concurrent包。

 

 

 

https://www.jianshu.com/p/60f661d95d53(FutureTask设计原理)

https://www.cnblogs.com/yangming1996/p/7612653.html(Java并发之线程中断)

 

 

http://developer.51cto.com/art/201807/579744.htm(什么是java内存模型)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值