java 线程缓存_Java 实现缓存,一个线程存,一个线程取
缓存类:
package com.zit.test;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
public enum Cache {
INSTANCE;
public BlockingDeque list = new LinkedBlockingDeque();
public void put(String str) {
try {
list.put(str);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public String take(){
String str = null;
try {
str = list.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
return str;
}
public boolean isEmpty(){
return list.isEmpty();
}
}
线程1:存数据
package com.zit.test;
import javax.annotation.PostConstruct;
import org.springframework.stereotype.Component;
@Componentpublic classTestCache1 {
@PostConstructpublic voidmethod1() {new Thread(newRunnable() {
@Overridepublic voidrun() {int i = 0;while(true) {
Cache.INSTANCE.put("g" +i);
i++;try{
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
},"ThreadPut").start();
}
}
线程2:取数据
package com.zit.test;
import javax.annotation.PostConstruct;
import org.springframework.stereotype.Component;
@Componentpublic classTestCache2 {
@PostConstructpublic voidmethod2() {new Thread(newRunnable() {
@Overridepublic voidrun() {while(true) {if(Cache.INSTANCE.isEmpty()) {try{
Thread.sleep(200);
}catch(InterruptedException e) {
e.printStackTrace();
}continue;
}
String str=Cache.INSTANCE.take();
System.out.println(str);
}
}
},"ThreadTake").start();
}
}
启动Web工程,可见效果
奇怪的是,如果不在Web工程里,只是运行Java类,没有效果
java 线程缓存_Java 实现缓存,一个线程存,一个线程取相关推荐
- java 全局缓存_java本地缓存
1.为什么要使用缓存 由于服务器.数据库.网络等资源有限,无法支撑越来越多的请求与计算量,所以将一部分数据放在缓存中,以此减小薄弱环节的计算量和请求流程. 网站中缓存的应用场景:1:可以缓存整个页面的 ...
- java服务器缓存_Java服务器缓存溢出有哪些呢、?
在C程序中,缓存溢出是最常见的安全隐患.缓存溢出在用户输入超过已分配内存空间(专供用户输入使用)时出现.缓存溢出可能成为导致应用被覆盖的关键因素.C程序很容易出现缓存溢出,但Java程序几乎不可能出现 ...
- java 获取线程某个_Java中如何唤醒“指定的“某个线程
熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wait + notify完成. 比如: synchronized(o) { o.wait(); //wai ...
- java线程死亡_java – 如何暂停main()直到所有其他线程死亡?
在我的程序中,我在main()方法中创建了几个线程. main方法的最后一行是调用System.out.println(),在所有的线程都死了之前我不想调用它.我已经尝试在每个线程上调用Thread. ...
- java除余_Java中的相除(/)和取余(%)的实现方法
取模运算与取余运算两个概念有重叠的部分但又不完全一致.主要的区别在于对负整数进行除法运算时操作不同. 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商 c = a / b: 2. ...
- java常用的缓存_java 常用缓存 - 只对肉有感觉的个人空间 - OSCHINA - 中文开源技术交流社区...
缓存是日常开发的粗茶淡饭,如果应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能 JVM 缓存 使用全局变量,如 Map.List等容器用于存放数据,可以认为是堆缓存 eh ...
- java 线程崩溃_java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理...
1.application应用程序注入自定义钩子程序 java语言本身提供一个很好的Runtime类,可以使我们很好的获取运行时信息.其中有一个方法是 public void addShutdownH ...
- java juc作者_Java面试之JUC系列:Collection线程不安全的举例
Collection线程不安全的举例 前言 1.当我们执行下面语句的时候,底层进行了什么操作 new ArrayList(); 底层创建了一个空的数组,伴随着初始值为10 当执行add方法后,如果超过 ...
- java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...
为什么要会线程起名字呢? 你如果拿到一连串的Thread-01,Thead-02我想你应该会疯掉,看以下代码 package rs.thread.day0504; /** * @auther rs * ...
最新文章
- [Luogu P2014]选课 (树形DP)
- ad域帐号登录提示无法处理请求_微软Windows Server之AD域控制器迁移测试方案
- 记一次SQL Server2005导入Oracle10G的折腾过程【供多种数据库导入导出数据的C#程序源码参考】...
- 云服务器 ECS CentOS 7配置默认防火墙 Firewall
- python中时间处理_Python中处理时间的几种方法小结
- Thinking in C++遇到的函数指针及应用
- 小红书回应赴港IPO:暂无明确计划
- h3c 链路聚合测试_4G/5G聚合路由器在直播中无线多链路聚合图传技术是什么?
- c+命名空间_了解C ++中的命名空间
- 大前端技术选型 Native原生iOS, Android, React-Native, Flutter, 微信小程序, HTML5
- 【图像去噪】基于matlab自适应布谷鸟算法优化维纳滤波器图像去噪【含Matlab源码 1892期】
- dis的前缀单词有哪些_前缀dis-dis和un和im前缀-un和dis前缀的区别
- 【独行秀才】macOS Monterey 12.3.1正式版(21E258)
- Ubuntu安装搜狗输入法后修改默认英文输入状态的方法
- 基于互联网的温度采集系统
- oracle能用hql吗,使用HQL查询日期,Oracle报“Invalid number”
- Android自定义控件(一) 可滑动的进度条
- shell向文件末尾添加内容
- 目标检测学习————Keras搭建yolo3目标检测平台
- 强化学习4——基于Actor-Critic的自适应PID控制器设计
热门文章
- 未来属于SVO? - KlayGE游戏引擎
- 西山居Donya达成战略合作 Simplygon技术优化《剑网3》
- shell与export命令
- Spark(Shuffle)
- FJ集团企业级邮件服务器——Exchange服务器安装与配置(边缘传输服务器)
- 百度安全DDoS攻击年度报告出炉 企业防护有新招!
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- PostgreSQL备份之omniPITR
- Memcache学习笔记
- IOS 学习笔记 2015-03-27 我理解的OC-代理模式