死锁现象与递归锁死锁所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象如下就是死锁:fromthreadingimportThread,LockimporttimemutexA=Lock()mutexB=Lock()classMyThread(Thread):defrun(self):self.f1()self.f2()deff1(self):mutexA.
分类:
编程语言 时间:
2018-02-12 23:01:57
阅读次数:
202
1、特点: 已获取锁的线程再次请求锁,可以直接获取。 2、实现: 自定义内部类 Sync,继承 AbstarctQueuedSynchronizer : 2.1、获取锁:lock() a、公平锁: acquire(1) b、非公平锁: if (compareAndSetState(0, 1)) // ...
分类:
编程语言 时间:
2018-02-11 14:41:59
阅读次数:
155
一、并发容器 1.ConcurrentHashMap 为什么要使用ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表 形成环 ...
分类:
编程语言 时间:
2018-02-10 18:18:47
阅读次数:
197
操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道 ...
分类:
编程语言 时间:
2018-02-07 21:19:22
阅读次数:
190
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。b、用在界面交互时点击执行较长时间请求 ...
分类:
编程语言 时间:
2018-02-02 00:40:51
阅读次数:
188
Java.util.concurrent.locks包提供了一个包含多种接口和类的框架,它针对条件进行加锁和等待。不同于对象的内置加锁同步以及java.lang.Object的等待/通知机制,包含锁框架的并发工具类通过轮询锁、显示等待及其它方式改善这种机制。锁框架包含了经常使用的锁、重入锁、条件、读写锁以及冲入读写锁等类别。一、锁Lock实现提供了比使用synchronized方法和语句可获得的更
分类:
编程语言 时间:
2018-01-21 19:02:54
阅读次数:
235
什么是AbstractQueuedSynchronizer?为什么我们要分析它? AQS:抽象队列同步器,原理是:当多个线程去获取锁的时候,如果获取锁失败了,当前线程就会被打包成一个node节点放入同步队列里面使用LockSuport的park方法阻塞起来,如果有线程释放了锁,放入同步队列的线程就会 ...
分类:
编程语言 时间:
2018-01-21 13:51:46
阅读次数:
191
1、synchronized 所重入场景: 继承关系的类,子类调用父类的方法 线程安全 带有synchronized关键字的方法互相调用 线程安全 2、volatile 作用:是变量在多个线程中可见,当改变变量值时(注意,改变的是主内存的值),每个线程的工作内存还是原先的值; 强制线程到主内存(共享 ...
分类:
编程语言 时间:
2018-01-20 15:09:43
阅读次数:
179
根据源码发现:维护了这个可见性变量state ;同一个线程对可重入锁体现用state标记作累加,int nextc = c + acquires; private volatile int state; ...
分类:
其他好文 时间:
2018-01-16 18:27:38
阅读次数:
118
spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能。当然主要对类SQL的支持。 在实际工作中会遇到这样的情况,主要是会进行两个数据集的筛选、合并,重新入库。 首先加载数据集,然后在提取数据集的前几行过程中,才找到limit的函数。 而合并就用到union函数,重新入库,就... ...
分类:
其他好文 时间:
2018-01-16 14:01:53
阅读次数:
1865