- 博客(28)
- 问答 (1)
- 收藏
- 关注
原创 volatile
volatile变量在每次被线程访问时,都强迫从主内存中重读该变量的值,而当该变量发生变化时,又会强迫线程将最新的值刷新到主内存。这样任何时刻,不同的线程总能看到该变量的最新值多线程版本(错误的)volatile关键字修改版在给helper对象初始化的过程中,jvm做了下面3件事:由于jvm的"优化",指令2和指令3的执行顺序是不一定的,当执行完指定3后,此时的helper对象就已经不在是null的了,但此时指令2不一定已经被执行。假设线程1和线程2同时调用getHelper()方法,此时线程1执行完指
2022-12-03 18:37:10
195
原创 内存屏障介绍
每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同硬件层的内存屏障分为两种:Load Barrier 和 Store Barrier即读屏障和写屏障内存屏障有两个作用内存屏障可以被分为以下几种类型:volatile的内存屏障策略非常严格、悲观volatile重排序规则:volatile内存屏障规则:
2022-12-03 18:36:42
494
原创 java虚拟机
对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。如果从内存回收的角度看,由于现在收集器基本都是采用的分代收集算法,所以Java堆中还可以细分为:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。
2022-12-02 09:29:16
252
原创 AQS介绍
在JDK1.5之前,一般是靠synchronized关键字来实现线程对共享变量的互斥访问。synchronized是在字节码上加指令,依赖于底层操作系统的Mutex Lock实现。AQS定义了一套多线程访问共享资源的同步器框架,是整个java.util.concurrent包的基石,Lock、ReadWriteLock、CountDowndLatch、CyclicBarrier、Semaphore、ThreadPoolExecutor等都是在AQS的基础上实现的。
2022-12-02 01:57:57
201
原创 condition
在java中,对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout),notify(),notifyAll(),这些方法配合synchronized关键字一起使用可以实现等待/通知模式。同样,Condition接口也提供了类似Object监视器的方法,通过与Lock配合来实现等待/通知模式。
2022-12-02 01:57:38
106
原创 mysql索引
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。
2022-12-02 01:56:34
88
原创 synchronized
加锁:当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程ID,以后该线程在进入和退出同步块时不需要花费CAS操作来加锁和解锁,而只需简单的测试一下对象头的Mark Word里是否存储着指向当前线程的偏向锁,如果测试成功,表示线程已经获得了锁,如果测试失败,则需要再测试下Mark Word中偏向锁的标识是否设置成1(表示当前是偏向锁),如果没有设置,则使用CAS竞争锁,如果设置了,则尝试使用CAS将对象头的偏向锁指向当前线程(此时会引发竞争,偏向锁会升级为轻量级锁)。
2022-12-02 01:56:00
78
原创 BlockingQueue
阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列支持阻塞添加和阻塞删除方法Java中的阻塞队列接口BlockingQueue继承自Queue接口插入方法:add(E e) : 添加成功返回true,失败抛IllegalStateException异常offer(E e) : 成功返回 true,如果此队列已满,则返回 false。
2022-12-02 01:55:42
78
空空如也
ExecuteNonQuery() 返回值为0
2013-09-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人