Java并发编程的艺术

P3

Lmbench3 可以测量上下文切换时长
vmstat 可以测量上下文切换次数

减少上下文切换:P3

  1. 无锁并发编程 lock-free
  2. CAS算法
  3. 使用最少线程
  4. 使用协程

查看java 线程ID

jps

查看tomcat线程状态命令:P4

ps -ef|grep tomcat  
jstack tomcat-pid > /home/guanhp/dump17
grep java.lang.Thread.State dump17 | awk '{print $2$3$4$5}'| sort | uniq -c
jstack java-pid | grep java.lang.Thread.State | awk '{print $2$3$4$5}'|sort |uniq -c

资源限制的挑战 P7

硬件:带宽的上传\下载速度、硬盘的读写速度、CPU处理速度
软件:数据库的连接数、Socket连接数

volatile P8

在多处理器编程开发中保证了共享变量的"可见性"
volatile 不会引起线程上下文的切换和调度

  1. Lock前缀指令会引起处理器缓存回写到内存
  2. 一个处理器的缓存回写到内存会导致其他处理器的缓存无效

MESI:修改、独占、共享、无效
处理器使用 嗅探 技术保证它的内部缓存、系统内存、和其他处理器的缓存的数据在总线上保持一致。

P17、P10
缓存一致性机制 会阻止同时修改由两个以上处理器缓存的内存区域数据。

synchronized P12

  • 普通同步方法,锁是当前实例对象
  • 静态同步方法,锁是当前类的Class对象
  • 同步方法块,锁是synchronized括号里配置的对象

monitorenter monitorexit

java对象头 P12

数组类型 3个字宽存储对象头
非数组类型 2个字宽存储对象头

字(word)与系统硬件有关,如数据总线为16位,则1word为2byte,32位1word为4byte,64位 1wrod为8byte。

在命令式编程中,线程之间通信机制有两种:共享内存和消息传递。

Java内存模型,Java Model Memory,JMM

try{}finally{},finally中的代码块什么时候会不执行

  1. Daemon(守护)线程被终止时
  2. System.exit()

Synchronized与Lock的区别

1.lock 可中断获取锁 2.lock超时获取锁 3.

  • qq_43638135
    妲己再美究为妃: 博主没有想过自己接一些私活干吗?我现在还没毕业,但是我也确实听说外挂市场自动化游戏脚本市场挺火热的,并且报酬也很丰厚,但是具体的我也不是很清楚,求解答。 (1个月前 #47楼) 查看回复(2) 举报 回复
    22