1.Runnable Runnable是个接口,使用很简单: 1. 实现该接口并重写run方法 2. 利用该类的对象创建线程 3. 线程启动时就会自动调用该对象的run方法 通常在开发中结合ExecutorService…
分类:java并发
redis 分布式锁
最近抽空优化了之前已有的redis分布式锁,主要用于解决高并发的问题,比如抢红包,多个人同时操作红包库存,当在库存只剩下1个的时候,一个人的减库存的操作事务没提交,另一个人的查库存操作刚好同步执行,这样就会出现很尴尬的事…
JAVA-初步认识-第十三章-验证静态同步函数的锁
一. 接下来更加深入地讲解一下,示例还是卖票,但是程序稍作了修改。 也就是调用的同步函数有多个修饰符,有了static的存在。 由于show函数是静态的,访问的num,那么num也要修改为静态的变量。其实num静不静态都…
Java乐观锁悲观锁、synchronized,重入锁 (ReentrantLock)处理并发(互斥同步、非互斥同步)
乐观锁和悲观锁 首先我们理解下两种不同思路的锁,乐观锁和悲观锁。这两种锁机制,是在多用户环境并发控制的两种所机制。下面看百度百科对乐观锁和悲观锁两种锁机制的定义: 悲观锁(Pessimistic Lock),正如其名,具…
Java多线程产生死锁的原因和解决方法
一般造成死锁必须同时满足如下4个条件: 1,互斥条件:线程使用的资源必须至少有一个是不能共享的; 2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源; 3,非剥夺条…
[置顶] zend_execute: op执行过程详解
解释器引擎最终执行op的函数是zend_execute,实际上zend_execute是一个函数指针,在引擎初始化的时候zend_execute默认指向了execute,这个exec…
java中Executor、ExecutorService、ThreadPoolExecutor介绍
源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** &nbs…
【Java并发编程实战】-----“J.U.C”:锁,lock
在java中有两种方法实现锁机制,一种是在前一篇博客中(【java7并发编程实战】—–线程同步机制:synchronized)介绍的synchronized,而另一种是比synchronized更…
java死锁及解决方案
死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源。避免死锁方针:a:避免嵌套封锁:这是死锁最主要的原因的,如果你已经有一个资源了就要避免封锁另一个资源。如果你运行时只有…
轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理
公平读写锁 ReentrantReadWriteLock的锁策略有两种,分为公平策略和非公平策略,两者有些小区别,为便于理解, 本小节将以示例的形式来说明多线程下,使用公平策略的读写锁是如何处理的。 首先看一下即将出场的…
Java使用Redis实现分布式锁
思路 主要用的是redis的setnx()函数,利用函数的特性,即成功setnx的话返回1,如果key已经存在,setnx返回0,来判断能否将key插入到redis中。 但是要考虑锁无法正常释放的情况,避免成为垃圾锁,导…
java中synchronized的普通方法与静态方法获取的锁对象是什么
好久没有复习java多线程相关知识点了,在此对自己的一些思考做一个记录。 说到java多线程,最有名的就是synchronized关键字了。 一.synchronized关键字的实现原理 java程序运行时所有的对象都存…