美文网首页
java多线程学习(二)

java多线程学习(二)

作者: wxz1997 | 来源:发表于2018-06-10 16:21 被阅读0次

一、并发和并行

并发是在一段时间内交替执行多个任务。并行则是在同一时间内同时执行多个任务。并行是特殊的并发。多线程编程的任务是把串行计算改为并发甚至并行计算。

二、线程安全问题

线程安全问题主要要保障3个方面:原子性,可见性,有序性。

1.原子性:对一个共享变量的读写操作,在其他线程看来要么未操作,要么全部完成,而不会看到中间结果。

实现原子性:a.锁       b.CAS指令

tips:除long/double外,其他类型的写操作都是原子性的,可通过volatitle long/double保障原子性,读操作都是原子性的,原子操作+原子操作不一定是原子操作

2.可见性:一个线程对共享变量的更新对于其他线程是可见的。

相对新值:一个线程对共享变量的更新后,其他线程能够读取更新后的值,这个值称为相对新值。

最新值:在一个线程读取这个共享变量的过程中,其他线程无法更新该变量的值,那么这个相对新值为最新值。

可见性只能保障得到相对新值。

3.有序性:一个处理器上运行的一个线程对共享变量所做的更新,在其他处理器运行的线程看来,这些线程是以什么顺序观察这些更新的。

三、上下文切换

从java应用看,一个线程在RUNNABLE和非RUNNABLE下转换会导致上下文切换。

四、线程的活性故障

1.死锁:两个或者更多线程因相互等待对方而永远被暂停

死锁产生的条件:资源互斥、资源不可被抢夺、占有并等待、 循环等待资源

2.锁死:等待线程一直无法被唤醒

3.活锁:线程一直在做无用功导致其任务一直无法进展

4.饥饿:线程一直无法获得其所需的资源导致其任务一直无法进展

五、资源的争用与调度

同时访问一个已被占有的资源的线程越多,争用程度越高。

同一时间,处于运行状态(即RUNNABLE的RUNNING状态)的线程数越多,并发程度越高。

我们的目标是要达到低争用,高并发。

六、java虚拟机对内部锁的优化

1.锁消除:能彻底消除锁的开销

2.锁粗化:能减少线程申请、释放锁的频率

3.偏向锁:能减小线程申请、释放锁的开销

4.适应性锁::能减小线程申请锁的开销

注意:上述优化仅在java虚拟机server模式下起作用。

七、java内存模型

java内存模型规定了一个线程如何和何时可以看到其他线程修改的共享变量的值以及在需要时如何同步地访问共享变量。

java内存模型(JMM)

相关文章

  • Java多线程学习(三)——synchronized(上)

    在前两节的《Java多线程学习(一)——多线程基础》和《Java多线程学习(二)——Thread类的方法介绍》中我...

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程(二)

    个人博客http://www.milovetingting.cn Java多线程(二) 前言 本文为学习Java相...

  • Java多线程学习

    Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • JAVA

    学习了JAVA中的多线程

  • java多线程学习(二)

    一、并发和并行 并发是在一段时间内交替执行多个任务。并行则是在同一时间内同时执行多个任务。并行是特殊的并发。多线程...

  • 查漏补缺之 Java 篇

    Java 中的 Monitor机制 参考: Java 多线程(二)-Monitor synchronized 与 ...

网友评论

      本文标题:java多线程学习(二)

      本文链接:https://www.haomeiwen.com/subject/oxnfeftx.html