并发编程
文章平均质量分 67
Keyu_
java后端/学生/非典型猫型程序员
个人博客:https://keyu.site/
展开
-
synchronized原理
在多线程并发编程中synchronized一直是元老级角色,很多人称之为重量级锁。而后在Java SE 1.6后对synchronized进行了优化,有的时候它就没有那么重了,引入了偏向锁和轻量级锁。 锁的释放和获取的内存语义 当线程释放锁时,JMM会把线程对应的本地内存中的共享变量刷新到主内存中。 当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而可以使得被监视器保护的临界...原创 2018-12-27 22:02:03 · 174 阅读 · 0 评论 -
多线程基础 Java并发1
目录 线程和进程概念 同步和异步概念 多线程创建方式 继承Thread类(不推荐) 实现runnable接口,重写run方法 使用匿名内部类 多线程的运行状态 守护线程、非守护线程 join方法() 优先级 线程安全 同步方式 同步代码块: 同步方法 注意 线程和进程概念 进程是独立的应用程序,进程中一般会有多个线程,进程是线程的集合。 线程就是一条执行路...原创 2018-12-22 15:32:07 · 128 阅读 · 0 评论 -
java中CAS实现的原理
从书中看到java中可以通过CAS的方式实现原子操作。在这里用了JAVA提供的用于原子操作的atomic类中的atomicInteger。 例子中的安全计数器代码如下: private void safeCount(){ for(::){ int i = atomicI.get(); boolean suc = atomicI.compareAndSe...原创 2018-12-29 00:16:32 · 424 阅读 · 0 评论 -
ReentrantLock的加锁和解锁原理
ReentrantLock的实现依赖于Java同步器框架AQS。 AQS使用一个整型的volatile变量(命名为state)来维护同步状态。 ReentrantLock分为公平锁和非公平锁 公平锁 使用公平锁时,加锁方法lock()的调用轨迹: ReentrantLock:lock() FairSync:lock() AbstractQueuedSynchronizer:acquire...原创 2018-12-29 14:16:45 · 1236 阅读 · 0 评论 -
volatile关键字详解
实现原理 //instance是volatile变量 instance = new Singleton(); 转换为汇编代码: 0x01a3de1d: movb $0×0,0×1104800(%esi); 0x01a3de24: lock add1 $0×0,(%esp) 在有volatile变量修饰的共享变量进行写操作时会多出第二行代码。 lock前缀的指令在多核处理器中会引发两...原创 2018-12-25 22:54:10 · 138 阅读 · 0 评论 -
Java典型线程通讯方式
等待\通知机制 如果不使用等待\通知机制,当线程1要向线程2实现线程通讯,可以通过共享一个变量,线程2可以使用while不停地对某一条件进行检测,直到线程1对其进行了修改(从而使条件满足),就实现了一次线程1到线程2的通讯,不过这样将浪费CPU的资源。 实现 wait()方法: Object类的一个方法,该方法将当前线程置入预执行队列中,并且在wait()代码处停止执行,直到接受到通知来...原创 2019-01-14 18:32:38 · 195 阅读 · 0 评论