并发
文章平均质量分 90
凯哥多帅哦
当编程成为一种习惯
展开
-
synchronized和volatile关键字
在讲这两个关键字之前,首先得了解一些前置知识: 共享变量 : 如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。 可见性 : 一个线程对共享变量值的修改,能够及时地被其他线程看到。 java内存模型(JMM:Java Memory Model) :1、所有的变量都存储在主内存中 2、每个线程都有自己独立的工原创 2017-05-07 15:42:23 · 271 阅读 · 0 评论 -
多线程之Callable接口及FutureTask源码分析
两者的不同在于:1、Runnable接口的run()方法没有返回值,而Callable接口的call()方法是带有泛型的返回值。2、Runnable方法的run()方法的异常只能在内部处理,而不能向上抛,而Callable的call()方法允许抛出异常。原创 2017-07-17 21:05:05 · 398 阅读 · 0 评论 -
多线程之重入锁ReentrantLock及原理
重入锁是sunchronized、Object.wait()和Object.notify()方法的替代品(或者说是增强版),在JDK5.0的早期版本,重入锁的性能远远好于synchronized,但从JDK6.0开始,JDK在synchronized上做了大量的优化,使得两者的性能差距并不大。但ReentrantLock也有一些synchronized没法实现的特性。重入锁,为啥要叫重入锁呢,原创 2017-07-10 16:33:43 · 1057 阅读 · 0 评论 -
多线程之AQS原理
AQS,全称为AbstractQueuedSynchronizer,粗粗的翻译下就是抽象的队列式的同步器。java.util.concurrent包中很多同步类,都是基于AQS,像ReentrantLock、Semaphore等等。小小的截取一段ReentrantLock类的这部分代码:原创 2017-07-10 11:41:11 · 636 阅读 · 0 评论 -
多线程之CAS
不同于synchronized这种悲观的阻塞同步机制,java.util.concurrent包中还借助CAS实现了乐观的非阻塞同步机制。CAS(CompareAndSwap):比较并交换CAS有包含三个操作数:内存值V,旧的预期值A以及更新值B。当且仅当V的值等于A的时候,CAS才通过原子方式用更新值B来更新V的值。否则不做任何操作。CAS的含义是:“我认为V的值应该是A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”。原创 2017-07-07 13:42:53 · 901 阅读 · 0 评论 -
多线程之循环栅栏CyclicBarrier及原理
CyclicBarrier它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。比如将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归0,然后接着凑齐下一批10个线程,这就是循环栅栏内在的含义。原创 2017-07-15 22:49:31 · 2766 阅读 · 0 评论 -
多线程之倒计时器CountDownLatch及原理
一、倒计时器CountDownLatch这个工具通常用来控制线程等待,它可以让某一个线程等待直到倒计时结束再开始执行。CountDownLatch是共享模式的。原创 2017-07-15 21:24:56 · 654 阅读 · 0 评论 -
多线程之信号量Semaphore及原理
重入锁ReentrantLock是独占模式,一次都只允许一个线程访问一个资源,而信号量是共享模式,也就是说可以指定多个线程,同时访问某一个资源。原创 2017-07-14 14:58:32 · 896 阅读 · 0 评论 -
等待(wait)和通知(notify)
为了支持多线程之间的协作,jdk提供了两个非常重要的方法线程等待wait()和通知notify()方法,这两个方法不是Thread类的,而是属于Object类。原创 2017-06-23 21:54:36 · 422 阅读 · 0 评论 -
synchronized的用法以及常见的使用错误
synchronized的作用是实现线程之间的同步,既能保证可见性,又能保证原子性。用法也有很多种,如下所示用一个线程类来演示下这三种:指定加锁对象直接作用于实例方法直接作用于静态方法原创 2017-06-23 20:15:49 · 987 阅读 · 0 评论 -
多线程之线程局部变量ThreadLocal及原理
ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。既然是只有当前线程可以访问的数据,自然是线程安全的。原创 2017-07-16 20:50:42 · 507 阅读 · 0 评论