非公平锁和公平锁在获取锁的方法上,流程是一样的;区别主要表现在“尝试获取锁的机制不同”。“公平锁”在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待);而“非公平锁”在每次尝试获取锁时,都是采用的非公平策略(无视等待队列,直接尝试获取锁,如果锁是空闲的,即可获取状态,则获取锁)。 一、获 ...
分类:
其他好文 时间:
2017-04-26 11:54:53
阅读次数:
187
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/21/2602015.html 信号量、互斥体和自旋锁 一、信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用 ...
分类:
其他好文 时间:
2017-04-20 18:29:01
阅读次数:
262
在生产 - 消费者问题中 newFixedThreadPool的构造参数里的nThreads是最大同时工作的线程数,如果工作线程已满,新提交的任务会被放到一个无界的LinkedBlockingQueue里(等待队列) 如果生产速度大于消费速度,那么会发生任务堆积,等待队列会扩展到内存耗尽 naive ...
分类:
编程语言 时间:
2017-04-05 14:01:19
阅读次数:
256
指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。 指标 2:吞吐量(Throughput) 指硬盘传输数据流的速度,传输数据为读... ...
分类:
其他好文 时间:
2017-04-01 17:16:49
阅读次数:
118
同步 要想实现同步操作,必须要获得线程的对象锁。获得它可以保证在同一时刻只有一个线能够进入临界区,并且在这个锁被释放之前,其他的线程都不能再进入这个临界区。如果其他线程想要获得这个对象的锁,只能进入等待队列等待。只有当拥有该对象锁的线程退出临界区时,锁才会被释放,等待队列中优先级最高的线程才能获得该 ...
分类:
其他好文 时间:
2017-03-31 13:06:33
阅读次数:
140
Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对 ...
分类:
编程语言 时间:
2017-03-29 21:12:12
阅读次数:
250
在计算机操作系统中,PV操作是进程管理中的难点。首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ②如果S³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 V(S): ...
分类:
其他好文 时间:
2017-03-23 18:55:24
阅读次数:
183
本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法。 ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait() 与 notify/notifyAll() 的执行过程 ③中断 调用wait()方法进入等待队列 ...
分类:
编程语言 时间:
2017-03-21 14:06:02
阅读次数:
180
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在Java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchroniz ...
分类:
编程语言 时间:
2017-03-10 00:14:12
阅读次数:
213
1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。 ...
分类:
编程语言 时间:
2017-02-01 14:53:51
阅读次数:
414