多线程&高并发
文章平均质量分 69
TAIKEMAN
这个作者很懒,什么都没留下…
展开
-
【Java进阶】多线程&高并发(四)<线程同步>【三】
一、轻量级同步机制:volatile关键字1. volatile的作用volatile可以保证变量在多个线程之间可见2. volatile与synchronized比较volatile关键字是线程同步的轻量级实现,其性能要比synchronized好volatile只能修饰变量,而synchronized修饰的是方法或者代码块随着JDK新版本的发布,synchronized的执行效率也有较大提升,在开发中使用synchronized的比率很大volatile变量不会发生阻塞,而sync原创 2023-06-24 17:43:09 · 54 阅读 · 0 评论 -
【Java进阶】多线程&高并发(四)<线程同步>【二】
Java中的每个对象都有一个与之关联的内部锁(Intrinsic Lock)这种锁也称为监视器(Monitor),这种内部锁是一种排他锁,可以保障原子性、可见性和有序性内部锁是通过synchronized关键字实现的,synchronized关键字可以修饰代码块和方法① 修饰代码块② 修饰实例方法也称为同步实例方法③ 修饰静态方法也称为同步静态方法。原创 2023-06-22 22:20:15 · 55 阅读 · 0 评论 -
【Java进阶】多线程&高并发(四)<线程同步>【一】
线程同步机制是一套用于协调线程之间的数据访问的机制。该机制可以保障线程的安全Java平台提供的线程同步机制包括:锁、volatile关键字、final关键字、static关键字以及相关的API(比如:Object.wait()/Object.notify()方法)线程安全问题的产生前提是多个线程并发访问共享数据将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次只能被一个线程访问。锁就是复用这个思路来保障线程的安全锁(Lock)可以理解为对共享数据进行保护的一个许可证。原创 2023-06-19 21:07:36 · 67 阅读 · 0 评论 -
【Java进阶】多线程&高并发(三)<Java内存模型>
一、Java内存模型的整体每个线程都有独立的栈空间每个线程都可以访问堆内存计算机的CPU不直接从主内存中读取数据,CPU读取数据时,先把主内存的数据读到Cache缓存中,把Cache中的数据读到Register寄存器中JVM中的共享数据可能会被分配到Register寄存器中,每个CPU都有自己的Register寄存器,一个CPU不能读取到其他CPU的寄存器中的内容。如果两个线程分别运行在不同的处理器(CPU)上,而这个共享数据被分配到寄存器中,会产生可见性问题即使JVM中的共享数据分配到主内存原创 2023-06-19 20:15:38 · 65 阅读 · 0 评论 -
【Java进阶】多线程&高并发(二)<线程安全问题>
非线程安全主要是指多个线程对同一个对象的实例变量进行操作时,会出现值被更改,但是值不同步的问题原子性、可见性和有序性原子(Atomic)就是不可分割的意思原子操作的不可分割有两层的含义① 访问(读/写)某个共享变量的操作从其他线程来看,该操作要么已经执行完毕,要么尚未发生,即其他线程是看不到当前操作的中间结果②访问同一组共享变量的原子操作是不能够交叉的。比如:现实生活中从ATM机取款,对于用户来说,要么操作成功,用户拿到钱,余额减少,增加一条交易记录;要么没拿到钱,相当于取款操作没有发生。原创 2023-06-17 10:43:40 · 156 阅读 · 0 评论 -
【Java进阶】多线程&高并发(一)<线程概述>
在Java中,创建一个线程就是创建一个Thread类(子类)的对象(实例)Thread类有两个常用的构造方法:Thread()和Thread(Runnable),对应的创建线程的两种方式,这两种创建线程的方式没有本质的区别① 定义Thread类的子类② 定义一个Runnable接口的实现类。原创 2023-06-14 20:29:33 · 1468 阅读 · 0 评论