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锁中的阻塞队列中的线程是非公平的相关推荐

  1. 聊聊并发(七)——Java中的阻塞队列

    1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用 ...

  2. 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 ...

  3. Java 中的阻塞队列

    目录 什么是阻塞队列 7 个阻塞队列 ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列. LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列. Priori ...

  4. 并发编程-23J.U.C组件拓展之阻塞队列BlockingQueue 和 线程池

    文章目录 概述 阻塞队列的常用场景 阻塞队列的4种处理方式 JDK 7提供的7个阻塞队列 ArrayBlockingQueue LinkedBlockingQueue PriorityBlocking ...

  5. 0.9.2、线程池——核心线程数、阻塞队列、最大线程数之间的关系

    文章目录 线程池内部运行过程 验证思路 确保先提交的任务优先被线程池处理 确保执行的任务占有足够久的线程池资源 可观测的阻塞队列大小 充分的信息 代码 自定义线程池 结果 结论 基本几结论 新任务提交 ...

  6. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  7. 聊聊Java中的并发队列中 有界队列和无界队列的区别

    转载自 https://blog.csdn.net/AJ1101/article/details/81711812 本文主要总体的说一说各种并发队列  首先来一张全体照  从有界无界上分  常见的有界 ...

  8. 阻塞队列只有一个线程在同一时刻对其进行或者读或者写

    因为BlockingQueue是一个阻塞队列,它的存取可以保证只有一个线程在进行,所以根据逻辑,生产者在内存满的时候进行等待,并且唤醒消费者队列

  9. 多线程 阻塞队列中的poll与take区别

    https://blog.csdn.net/qiuchaoxi/article/details/80359462

  10. 【高并发】掌握JUC中的阻塞队列

    1.概述 转载:添加链接描述

最新文章

  1. 顺序表的删除(按位置删、头删、尾删)
  2. 听说程序猿不会撩妹,我笑了
  3. linux新增ssh端口80,Linux(CentOS 7) 新增或修改 SSH默认端口
  4. Java 异常处理的误区和经验总结--转载
  5. nginx配置文件语法高亮的Sublime Text扩展
  6. C#集合类型——Array、ArrayList、List 之浅谈
  7. (四)十大经典排序算法(动画图解,代码完全)
  8. 顺序结构实现【数据结构】
  9. CH2401 送礼物(双向dfs)
  10. 【软件工程】复利计算器--结对编程
  11. springmvc中Date类型转换
  12. springboot接收多对象_springboot实现邮件发送
  13. restfulframework引用多对多外键
  14. 多台电脑集群运算_Linux服务器集群概念辨识
  15. IT基础知识(精华版二)
  16. matlab多元函数求导数,MATLAB多元函数导数 - 范文中心
  17. 华为2019年3月27日实习生笔试题及解答
  18. python大神年薪_我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?
  19. 显微镜下的大明——第一个故事
  20. python 爬取种子_Python爬虫框架Scrapy 学习笔记 2 ----- 爬取Mininova网站种子文件信息...

热门文章

  1. 管螺纹如何标注_外螺纹、内螺纹的画法,非标准螺纹的画法,你还会画吗?
  2. 有基础学python看什么书好_python入门学习看什么书好,有什么书籍推荐
  3. java put请求_计算机毕业设计中用java实现小程序推送(springboot实现)
  4. 服务器cp所以型号,云服务器cp
  5. h5 右下角浮动按钮_Flutter 浮动按钮-FloatingActionButton的使用
  6. 错误empty character constant的解决办法
  7. 「译」创建一个Hexo主题-Part2:其他页面
  8. Midnight Commander强大的命令行文件管理器
  9. 二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))...
  10. MFC中CString.Format的详细用法