获取synchronized锁中的阻塞队列中的线程是非公平的
synchronized中阻塞队列的线程是非公平的
测试demo:
import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit;public class SleepState {public static ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>() {@Overrideprotected SimpleDateFormat initialValue() {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");}};private static final int[] lock = new int[0];public static void main(String[] args) throws InterruptedException {Thread thread1 = new Thread(new TestSynchronizedTask(lock, 1000 * 10), "Thread1");Thread thread2 = new Thread(new TestSynchronizedTask(lock, 10), "Thread2");Thread thread3 = new Thread(new TestSynchronizedTask(lock, 1000), "Thread3");thread1.start();TimeUnit.MILLISECONDS.sleep(1000);thread2.start();TimeUnit.MILLISECONDS.sleep(1000);thread3.start();} }class TestSynchronizedTask implements Runnable {private final int[] lock;private int sleepMilliSeconds;public TestSynchronizedTask(int[] lock, int sleepMilliSeconds) {this.lock = lock;this.sleepMilliSeconds = sleepMilliSeconds;}public TestSynchronizedTask(int[] lock) {this(lock, 0);}@Overridepublic void run() {synchronized (lock) {try {System.out.println(MessageFormat.format(" {0} {1} begin", SleepState.threadLocal.get().format(new Date()), Thread.currentThread()));TimeUnit.MILLISECONDS.sleep(sleepMilliSeconds);System.out.println(MessageFormat.format("{0} {1} will end", SleepState.threadLocal.get().format(new Date()), Thread.currentThread()));} catch (InterruptedException e) {e.printStackTrace();}}} }
执行结果:2016-05-26 13:31:44.260+0800 Thread[Thread1,5,main] begin 2016-05-26 13:31:54.260+0800 Thread[Thread1,5,main] will end2016-05-26 13:31:54.260+0800 Thread[Thread3,5,main] begin 2016-05-26 13:31:55.260+0800 Thread[Thread3,5,main] will end2016-05-26 13:31:55.260+0800 Thread[Thread2,5,main] begin 2016-05-26 13:31:55.276+0800 Thread[Thread2,5,main] will end
获取synchronized锁中的阻塞队列中的线程是非公平的相关推荐
- 聊聊并发(七)——Java中的阻塞队列
1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用 ...
- Java中的阻塞队列-LinkedBlockingQueue(二)
原文地址:http://benjaminwhx.com/2018/05/11/%E3%80%90%E7%BB%86%E8%B0%88Java%E5%B9%B6%E5%8F%91%E3%80%91%E8 ...
- Java 中的阻塞队列
目录 什么是阻塞队列 7 个阻塞队列 ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列. LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列. Priori ...
- 并发编程-23J.U.C组件拓展之阻塞队列BlockingQueue 和 线程池
文章目录 概述 阻塞队列的常用场景 阻塞队列的4种处理方式 JDK 7提供的7个阻塞队列 ArrayBlockingQueue LinkedBlockingQueue PriorityBlocking ...
- 0.9.2、线程池——核心线程数、阻塞队列、最大线程数之间的关系
文章目录 线程池内部运行过程 验证思路 确保先提交的任务优先被线程池处理 确保执行的任务占有足够久的线程池资源 可观测的阻塞队列大小 充分的信息 代码 自定义线程池 结果 结论 基本几结论 新任务提交 ...
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- 聊聊Java中的并发队列中 有界队列和无界队列的区别
转载自 https://blog.csdn.net/AJ1101/article/details/81711812 本文主要总体的说一说各种并发队列 首先来一张全体照 从有界无界上分 常见的有界 ...
- 阻塞队列只有一个线程在同一时刻对其进行或者读或者写
因为BlockingQueue是一个阻塞队列,它的存取可以保证只有一个线程在进行,所以根据逻辑,生产者在内存满的时候进行等待,并且唤醒消费者队列
- 多线程 阻塞队列中的poll与take区别
https://blog.csdn.net/qiuchaoxi/article/details/80359462
- 【高并发】掌握JUC中的阻塞队列
1.概述 转载:添加链接描述
最新文章
- 顺序表的删除(按位置删、头删、尾删)
- 听说程序猿不会撩妹,我笑了
- linux新增ssh端口80,Linux(CentOS 7) 新增或修改 SSH默认端口
- Java 异常处理的误区和经验总结--转载
- nginx配置文件语法高亮的Sublime Text扩展
- C#集合类型——Array、ArrayList、List 之浅谈
- (四)十大经典排序算法(动画图解,代码完全)
- 顺序结构实现【数据结构】
- CH2401 送礼物(双向dfs)
- 【软件工程】复利计算器--结对编程
- springmvc中Date类型转换
- springboot接收多对象_springboot实现邮件发送
- restfulframework引用多对多外键
- 多台电脑集群运算_Linux服务器集群概念辨识
- IT基础知识(精华版二)
- matlab多元函数求导数,MATLAB多元函数导数 - 范文中心
- 华为2019年3月27日实习生笔试题及解答
- python大神年薪_我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?
- 显微镜下的大明——第一个故事
- python 爬取种子_Python爬虫框架Scrapy 学习笔记 2 ----- 爬取Mininova网站种子文件信息...
热门文章
- 管螺纹如何标注_外螺纹、内螺纹的画法,非标准螺纹的画法,你还会画吗?
- 有基础学python看什么书好_python入门学习看什么书好,有什么书籍推荐
- java put请求_计算机毕业设计中用java实现小程序推送(springboot实现)
- 服务器cp所以型号,云服务器cp
- h5 右下角浮动按钮_Flutter 浮动按钮-FloatingActionButton的使用
- 错误empty character constant的解决办法
- 「译」创建一个Hexo主题-Part2:其他页面
- Midnight Commander强大的命令行文件管理器
- 二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))...
- MFC中CString.Format的详细用法