Java并发编程(十四)伪共享

此文为读书笔记,欢迎评论,谈论问题,共同进步!什么是伪共享为了解决计算机系统中主内存与CPU 之间运行速度差问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器(Cache)。这个Cache一般是被集成到 CPU 内部的,所以也叫 CPU Cache。两级 Cache 结构图:在Cache 内
并发 2021年02月21日 125次浏览

Java并发编程(十三)Java 中的原子性操作

此文为读书笔记,欢迎评论,谈论问题,共同进步!原子性操作,是指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行其中一部分的情况。在设计计数器时一般都先读取当前值,然后+1,再更新。这个过程是读—改一写的过程,如果不能保证这个过程是原子性的,那么就会出现线程安全问题。Java 中的
并发 2021年02月21日 117次浏览

Java并发编程(十二)Java 中共享变量的内存可见性问题

此文为读书笔记,欢迎评论,谈论问题,共同进步!Java 的内存模型先看下多线程下处理共享变 Java 的内存模型:Java内存模型规定,将所有的变量都存放在主内存中,当线程使用变量时,会把主内存里面的变量复制到自己的工作空间(工作内存),线程读写变量时操作的是自己工作内存中的变量。Java内存模型是
并发 2021年02月21日 135次浏览

Java并发编程(十一)多线程并发编程

此文为读书笔记,欢迎评论,谈论问题,共同进步!什么是多线程并发编程先区分下并发和并行:并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束;并行是说在单位时间内多个任务同时在执行;并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定
并发 2021年02月21日 93次浏览

Java并发编程(十)ThreadLocal

ThreadLocalThreadLocal是 JDK包提供的,它提供了线程本地变量,也就是说创建了一个 ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。创建一个ThreadLo
并发 2021年02月21日 103次浏览

Java并发编程(九)守护线程与用户线程

守护线程与用户线程Java中的线程分为两类,分别为daemon线程(守护线程)和 user 线程(用户线程)。在JVM启动时会调用 main函数,main 函数所在的线程就是一个用户线程,其实在JVM内部同时还启动了好多守护线程,比如垃圾回收线程。那么守护线程和用户线程有什么区别呢?区别之一是当最后
并发 2021年02月21日 97次浏览

Java并发编程(八)线程死锁

什么是线程死锁死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,在无外力作用的情况下,这些线程会一直相互等待而无法继续运行下去.图中的两个线程各持有一个资源占有不释放, 又想去获取对方持有的资源, 造成两个线程一直等待对方释放, 造成了死锁.死锁的产生须具备四个条件互斥条件
并发 2021年02月21日 87次浏览

Java并发编程(七)线程中断

Java中的线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是被中断的线程根据中断状态自行处理。void interrupt()方法中断线程,例如,当线程A运行时,线程B可以调用线程A的interrupt()方法来设置线程A的中断标志为true并立即返回。设置标志
并发 2021年02月21日 82次浏览

Java并发编程(六)让出CPU执行权的 yield方法

Thread 静态 yield 方法当一个线程调用yield方法时,当前线程会让出CPU使用权,然后处于就绪状态,线程调度器会从线程就绪队列里面获取一个线程优先级最高的线程,当然也有可能会调度到刚刚让出CPU的那个线程来获取CPU执行权。public class YieldTest implemen
并发 2021年02月21日 95次浏览

Java并发编程(五)让线程睡眠的 sleep 方法

Thread类中有一个静态的sleep方法,当一个执行中的线程调用了Thread的sleep方法后,调用线程会暂时让出指定时间的执行权,也就是在这期间不参与CPU的调度,但是该线程所拥有的监视器资源,比如锁还是持有不让出的。指定的睡眠时间到了后该函数会正常返回,线程就处于就绪状态,然后参与CPU的调
并发 2021年02月21日 84次浏览