博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取synchronized锁中的阻塞队列中的线程是非公平的
阅读量:6820 次
发布时间:2019-06-26

本文共 2228 字,大约阅读时间需要 7 分钟。

 

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
threadLocal = new ThreadLocal
() { @Override protected 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); } @Override public 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]  begin2016-05-26 13:31:54.260+0800 Thread[Thread1,5,main]  will end 2016-05-26 13:31:54.260+0800 Thread[Thread3,5,main]  begin2016-05-26 13:31:55.260+0800 Thread[Thread3,5,main]  will end 2016-05-26 13:31:55.260+0800 Thread[Thread2,5,main]  begin2016-05-26 13:31:55.276+0800 Thread[Thread2,5,main]  will end

 

转载地址:http://bgpzl.baihongyu.com/

你可能感兴趣的文章
常见窄带宽带音频编码格式
查看>>
《产品设计与开发(原书第5版)》—— 第2章 开发流程和组织 2.1 产品开发流程...
查看>>
Win 10 通过 Oberthur Technologies 获得 eSIM 支持
查看>>
LXQt 0.8.0 发布,轻量级桌面环境
查看>>
Mt.Gox 源代码、客户数据与员工信息遭泄露
查看>>
StackOverflow:2015 年开发者调查报告
查看>>
《自顶向下网络设计(第3版)》——1.5 小结
查看>>
《Android 游戏开发大全(第二版)》——6.5节闯关动作类游戏
查看>>
《黑客秘笈——渗透测试实用指南》—第2章2.5节总结
查看>>
《机器人构建实战》——1.4 典型机器人
查看>>
《大话Oracle Grid:云时代的RAC》——1.1 原料
查看>>
《智能制造时代的研发智慧:知识工程2.0》一第3章 隐性知识的显性化
查看>>
《树莓派Python编程入门与实战》——1.5 决定如何购买外设
查看>>
《解读NoSQL》——1.2 NoSQL的商业驱动
查看>>
《编译与反编译技术实战 》一 第3章 词法分析器的设计与实现
查看>>
《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.7 时间模型...
查看>>
Spring基础
查看>>
Maven入门
查看>>
《R数据可视化手册》——第1章 R基础
查看>>
如果肉眼可以看到wifi,世界是什么样子?
查看>>