java多线程
文章平均质量分 91
java多线程
herokang
会飞的猿
展开
-
多线程基础(九)信号量Semaphore——[ˈseməfɔːr]
1. Semaphore----[ˈseməfɔːr]信号量可以理解为限流算法令牌算法里的令牌池,他是对锁的扩展,无论synchronized还是Lock一次只允许一个线程访问资源,而Semaphore内部维护了一个信号量计数器,当线程访问资源时将计数器减一,访问完毕后计数器加一,当计数器减到0时再有线程来获取锁将会等待,当有一个线程执行完毕释放锁后计数器加一不为0,此时等待的线程可以获取锁并把...原创 2019-08-18 19:57:00 · 278 阅读 · 0 评论 -
多线程基础(七)CountDownLatch与CyclicBarrier
1. CountDownLatchCountDownLatch的作用是,新建CountDownLatch时可以指定count计数器数,每调用一次countDownLatch.countDown();计数器减一,countDownLatch.await();方法会阻塞知道计数器值为0才会往下执行。一般可用于某n个线程等待其它n个线程执行完毕才执行。如下示例public class CountD...原创 2019-08-17 23:04:39 · 241 阅读 · 0 评论 -
多线程基础(八)并发数据结构并发容器
1. 并发ListVector和CopyOnWriteArrayList,是两个并发list的实现CopyOnWriteArrayList:实现原理是利用了对象的不变性,当没有进行写操作时,不加锁,当有写操作时先复制一份对象副本,然后进行修改,最后保存时加锁,通过以上方式减少锁竞争,从原理来看比较适合读多写少场景。Vector:读和写都试用了synchorinized关键字,高并发读写下性能...原创 2019-08-18 19:09:09 · 162 阅读 · 0 评论 -
多线程基础(五)线程池
1. ThreadPoolExecutor虽然Executors框架提供了好多创建线程的方法,比如:但是我们并不推荐大家使用这些方法,阿里开发规范也有一条:创建线程池建议大家使用ThreadPoolExecutor类,我们看一下Executors源码这些创建方式底层都是对ThreadPoolExecutor类的封装public static ExecutorService newFixed...原创 2019-08-17 19:16:36 · 219 阅读 · 0 评论 -
多线程基础(四)Lock
1. LockLock的实现原理和Synchronized完全不同,它使用compare and swap理念,如果符合cas判定逻辑,那么就修改state状态,把当前线程设定为独占,无法获取锁就加入到等待队列。2. Lock实现同步import java.util.concurrent.locks.ReentrantLock;public class ThreadTest2 { ...原创 2019-08-16 23:01:46 · 247 阅读 · 0 评论 -
多线程基础(三)ThreadLocal
多个线程共享变量可以使用static实现,那如果想实现每个线程有自己的共享变量怎样实现呢?我们先来讨论一个实际问题:web后台项目用户登录后操作网数据库插入一条数据,我们不希望在controller、service、dao之间显式的定义参数传递用户名等信息,我们可以在登录拦截器里把校验后的用户信息保存到一个地方,然后再dao层直接取出,这样插入数据的时候就可以知道是谁操作的,这个功能可以使用T...原创 2019-08-14 23:01:04 · 165 阅读 · 0 评论 -
多线程基础(二)
本篇文章为知识点复习总结,初学者相关示例可以自己写代码测试一下1. 悲观锁与乐观锁悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样当第二个线程想拿这个数据的时候,第二个线程会一直堵塞,直到第一个释放锁,他拿到锁后才可以访问。传统的数据库里面就用到了这种锁机制,例如:行锁,表锁,读锁,写锁,都是在操作前先上锁。java中的synchronize...原创 2019-08-14 14:37:58 · 181 阅读 · 0 评论 -
多线程基础(一)
1. currentThread与sleepThread.currentThread()、this.currentThread()、currentThread()效果都是一样的,指的是拿到运行当前代码的线程对象编写如下代码public class MyThread extends Thread { public MyThread() { System.out.prin...原创 2019-08-13 17:11:55 · 147 阅读 · 0 评论 -
多线程生产消费模型的三种实现
1. synchornized实现public class MyTest { private static String str = ""; private static final Object lock = new Object(); private static AtomicInteger num = new AtomicInteger(0); static...原创 2019-09-07 14:32:17 · 167 阅读 · 0 评论