Java 实现缓存,一个线程存,一个线程取
缓存类:
package com.zit.test; import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque; public enum Cache { INSTANCE; public BlockingDeque<String> list = new LinkedBlockingDeque<String>(); 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; @Component
public class TestCache1 { @PostConstruct
public void method1() { new Thread(new Runnable() {
@Override
public void run() {
int i = ;
while(true) { Cache.INSTANCE.put("g" + i);
i++;
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} },"ThreadPut").start();
} }
线程2:取数据
package com.zit.test; import javax.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component
public class TestCache2 { @PostConstruct
public void method2() { new Thread(new Runnable() {
@Override
public void run() {
while(true) {
if(Cache.INSTANCE.isEmpty()) {
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
continue;
} String str = Cache.INSTANCE.take();
System.out.println(str);
}
} },"ThreadTake").start(); } }
启动Web工程,可见效果
奇怪的是,如果不在Web工程里,只是运行Java类,没有效果
Java 实现缓存,一个线程存,一个线程取的更多相关文章
- Java分布式缓存框架
http://developer.51cto.com/art/201411/457423.htm 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓 ...
- 5个强大的Java分布式缓存框架
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了5 ...
- java 使用线程做一个简单的ATM存取款实例.(转)
线程 Thread 类,和 Runable 接口 比较两者的特点和应用领域. 可以,直接继承线程Thread类.该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能在继承其他类 实现Runn ...
- Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程
下面将依次介绍: 1. 线程状态.Java线程状态和线程池状态 2. start方法源码 3. 什么是线程池? 4. 线程池的工作原理和使用线程池的好处 5. ThreadPoolExecutor中的 ...
- 二 Java利用等待/通知机制实现一个线程池
接着上一篇博客的 一Java线程的等待/通知模型 ,没有看过的建议先看一下.下面我们用等待通知机制来实现一个线程池 线程的任务就以打印一行文本来模拟耗时的任务.主要代码如下: 1 定义一个任务的接口 ...
- Java再学习——停止一个正在运行的线程
关于这个问题,先了解一下Thread类方法中被废弃的那些方法.suspend(), resume(),stop()/stop(Throwable obj),destroy() 首先,stop(Thro ...
- java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...
- java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?
首先,服务器的实现不止有这两种方式. 先谈谈题主说的这两种服务器模型: 1.收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞 这个是单线程模型,无法并发,一个请求没处理完服务器就会阻塞,不会 ...
- 【Java面试】如何中断一个正在运行的线程?
一个去京东面试的工作了5年的粉丝来找我说: Mic老师,你说并发编程很重要,果然我今天又挂在一道并发编程的面试题上了. 我问他问题是什么,他说:"如何中断一个正在运行中的线程?". ...
- 闲来无事,用Java的软引用写了一个山寨的缓存
闲来无事,用Java的软引用写了一个山寨的缓存 博客分类: java基础 众所周知java中的引用分为 StrongReference.SoftReference.WeakReference.Phan ...
随机推荐
- SQL 增加列、修改列、删除列
SQL语句增加列.修改列.删除列 1.增加列: alter table tableName add columnName varchar(30) 2.1. 修改列类型: alter table tab ...
- ServletContext详解(转)
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而servletContext,所 ...
- Kubernetes资源管理
目录贴:Kubernetes学习系列 1.资源模型 虛拟化技术是云计算平台的基础,其目标是对计算资源进行整合或划分,这是云计算管理平台中的关键技术.虚拟化技术为云计算管理乎台的资源管理提供了资源调配上 ...
- SQL Server通过BCP进行大批量数据导入导出
预置条件: 使用sa帐号登录SQL Server Management Studio,右键点击安全性-登录名-数据库用户名属性,设置服务器角色为sysadmin. 删除已存在的存储过程 String ...
- Poj1979 Red and Black (DFS)
Red and Black Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 47466 Accepted: 25523 D ...
- 【shell】wc命令
wc是一个非常方便的文本处理命令,有两个功能: 统计文件的行数 统计文件的字符数 那么就有三个参数: -l :只统计行数 -w: 统计英文单词数 -m: 统计字符数 default :行数+单词数 默 ...
- Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
- Ubuntu 16.04下vsftpd 安装配置实例
从https://www.linuxidc.com/Linux/2017-06/144807.htm转载 第一步:安装VSFTPD sudo apt-get install vsftpd 安装完成后启 ...
- Learning-Python【4】:Python流程控制与循环
一.if...else分支 1.什么是if判断 判断一个条件如果成立则如何,不成立则如何 2.为何要有if判断 让计算机能像人一样具有判断能力 语法1:if...else if 判断条件: 代码块1 ...
- ORM查询条件
模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...