锁同步
文章平均质量分 63
爱炒饭
每天进步一点点
展开
-
Synchronized锁升级
jdk1.5以及以前的版本Synchronized锁的堵塞和唤醒需要用户态和内核态的切换,比较消耗CPU资源,属于重量级锁以及悲观锁的范畴。从jdk1.6开始,Synchronized锁有了一定的优化,偏向锁和轻量级锁是乐观锁,重量级锁才是悲观锁。偏向锁对象锁会偏向于第一个获得它的线程,考虑到大部分情况是无锁状态,一个线程获取到了某个对象的访问,那么下次大概率还是可以获取到这个对象的访问的,那么此时就不需要加锁,不需要进行同步操作。一个线程获取到只需要在对象的Mark Word上加个01(偏向模原创 2021-03-15 10:34:04 · 173 阅读 · 0 评论 -
jdk Thread状态与生产者消费者模型
public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may ...原创 2021-03-01 17:43:06 · 178 阅读 · 0 评论 -
java同步方式
1、voliatevoliate赋予变量在多线程中的可见性,只能作用于变量,非堵塞。java内存模型(如下图)描述了多线程之间信息交换和同步的方式:每个线程都从主内存load一份数据到自己的工作内存,线程对变量的读写操作都是在工作内存中进行的,然后在save到主内存。如果多线程同时操作主内存同意拷贝变量a,那么就可能导致变量的值乱掉,voliate保证了voliate变...原创 2019-05-26 18:55:17 · 1637 阅读 · 0 评论 -
方法锁、对象锁、类锁
一、java内存模型java内存模型规定了所有变量都存储在主内存(Main Memory)中,每个线程还有自己的工作线程(Working Memory),线程的工作内存保存了该线程使用到的变量的主内存副本拷贝,线程对变量的所有读写操作都必须在工作线程中进行,而不能直接读写主内存中的变量(这里的变量指的是实例字段、静态字段和构成数组对象的元素以及堆上的数据)。不同线程之间也无法直接访问其它线程工...原创 2018-11-04 15:22:18 · 965 阅读 · 0 评论 -
C++多线程中的互斥量和互斥锁
C++多线程竞争时经常用到互斥量用std::mutex,它可以单独使用,也可以和互斥锁在一起使用。std::mutex单独使用的话就lock()加锁,用unlock()解锁。为了方便的话可以用用互斥锁lock_guard,lock_guard会在创建时自动加锁,并且在作用域结束时自动析构释放锁。lock_guard只能在创建时加锁,在作用域结束时释放锁,如果想中间释放锁呢,此时就需要加强版的unique_lock了,unique_lock可以随时加锁和解锁,并且可以和条件变量 std::cond原创 2020-07-17 20:54:19 · 543 阅读 · 0 评论 -
java多线程之wait,join,yield
java多线程同步一般用的是synchronized关键字,对其他几个函数wait,join,yield用的不多,尤其是join,yield总是很模糊,现在理一理加深印象。1、waitwait用于进入对象锁相关的等待池中,执行wait后会释放对象锁,此时其他线程可以访问获取对象锁了。wait()经常与notify()(唤醒等待池中的任意一个wait对象),notifyAll(唤醒等待池...原创 2020-01-31 20:31:38 · 473 阅读 · 0 评论