多线程-7.线程安全性,活跃性,性能问题

安全性:
数据竞争: 多个线程同时访问一个数据,并且至少有一个线程会写这个数据。
竞态条件: 程序的执行结果依赖程序执行的顺序。
也可以按照以下的方式理解竞态条件: 程序的执行依赖于某个状态变量,在判断满足条件的时候执行,但是在执行时其他变量同时修改了状态变量。
if (状态变量 满足 执行条件) {
  执行操作
}
 
活跃性:
死锁:破坏造成死锁的条件,1,使用等待-通知机制; 2主动释放占有的资源;3,按顺序获取资源。
活锁:虽然没有发生阻塞,但仍会存在执行不下去的情况。感觉像进入了某种怪圈。解决办法,等待随机的时间。
饥饿:有些线程执行时间长导致其他线程等待很长时间,有些线程优先级低导致一直不能得到执行。
 
性能:
核心就是在保证安全性和活跃性的前提下,根据实际情况,尽量降低锁的粒度。即尽量减少持有锁的时间。JDK的并发包里,有很多特定场景针对并发性能的设计。还有很多无锁化的设计,例如MVCC,TLS,COW等,可以根据不同的场景选用不同的数据结构或设计。

posted @ 2021-03-12 15:22  凝冰物语  阅读(149)  评论(0编辑  收藏  举报