JAVA中怎么使用Lock和Condition手写阻塞队列
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,今天就跟大家聊聊有关JAVA中怎么使用Lock和Condition手写阻塞队列,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。package c
千家信息网最后更新 2025年02月06日JAVA中怎么使用Lock和Condition手写阻塞队列
今天就跟大家聊聊有关JAVA中怎么使用Lock和Condition手写阻塞队列,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
package com.study;import java.util.Random;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class BlockingQueueDemo { public static void main(String[] args) { BlockingQueueDemo blockingQueueDemo = new BlockingQueueDemo(); final BlockingQueueClass blockingQueueClass = blockingQueueDemo.new BlockingQueueClass(); Thread thread = new Thread(new Runnable() { @Override public void run() { while(true){ int value = new Random().nextInt(); System.out.println("准备存数据了"); blockingQueueClass.put(value); System.out.println("已经存好数据了"); } } }); thread.start(); Thread thread2 = new Thread(new Runnable() { @Override public void run() { while(true){ System.out.println("准备取数据了"); Object value = blockingQueueClass.take(); System.out.println("取到的数据为:" + value); } } }); thread2.start(); } class BlockingQueueClass{ Lock lock = new ReentrantLock(); Condition notFullCondition = lock.newCondition(); Condition notEmptyCondition = lock.newCondition(); Object[] items = new Object[100]; private int putLength,takeLength,count; public void put(Object object){ lock.lock(); try { while(count == items.length){ try { notFullCondition.await(); } catch (InterruptedException error) { error.printStackTrace(); } } items[putLength] = object; if(++putLength == items.length){ putLength = 0; } ++count; notEmptyCondition.signal(); } catch (Exception e) { e.printStackTrace(); } finally{ lock.unlock(); } } public Object take(){ Object object = new Object(); lock.lock(); try { while(count == 0){ try { notEmptyCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } object = items[takeLength]; if(++takeLength == items.length){ takeLength = 0; } --count; notFullCondition.signal(); } catch (Exception e) { e.printStackTrace(); lock.unlock(); } return object; } }}
看完上述内容,你们对JAVA中怎么使用Lock和Condition手写阻塞队列有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数据
内容
队列
阻塞
准备
更多
知识
篇文章
行业
资讯
资讯频道
频道
进一
支持
有关
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络技术差分吗
软件开发评审现场
企业网站及软件开发与维护
教务管理数据库心得
学员信息MySQL数据库设计
电子信息网络技术的工作原理
打开程序老是提示连接数据库失败
统信uos家庭版搭建服务器
redis的数据库文件
vps架设代理服务器
丽水招软件开发
济南外卖软件开发
深圳市红思网络技术公司
mysql数据库 购买
互联网科技发展的作文提纲
香港软件开发公司都有
阿里网络安全技术牛人
medline数据库网址
服务器硬盘和raid磁盘卡
合川区网络安全审计系统咨询公司
日志写入数据库还是文件
软件开发毕业生工资水平
ecs 云服务器是什么
怎么上传数据库
连接到任意服务器失败为什么
仪表软件开发数据库
网络安全蓝军是什么意思
电脑服务器显示Bo是什么意思
计算机网络技术哪个方面
web软件开发工程师简历