背景介绍
还是年轻啊,知识储备严重不足.
今天大佬让我实现以下XXX.
每次用户请求都会判断当前值在不在集合里面,集合数据来自于数据库,不用做缓存,每隔几分钟从数据库load一下数据放到内存就行.
我一脸懵逼,操作内存?我不会啊.
而且没有用spring框架,我也不会定时任务啊…Timer什么的记不住要现场查一下吗?
然后大佬帮我写了一下…..我现在来复习一下.
场景模拟如下:
每隔X段时间,随机生成一些随机数放到内存中.会有用户请求接口来查看某个值是否在其中
.
具体实现了:
每隔5s,随机生成3个随机数替换掉原来的,然后启动一个死循环不断判断2是否在这次的list中.
``
其实比较简单,当时一脸懵逼没想起来,也是对已有知识掌握的不够熟悉.
- 放进内存问题. 这个其实直接new个list就好,就在内存里面啊….
- 定时任务,用Java的定时线程池来解决.
实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package daily;
import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference;
public class ScheduleThreadTest {
private static final AtomicReference<List<Integer>> list = new AtomicReference<>(new ArrayList<>());
public static void main(String[] args) throws InterruptedException { ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
schedule.scheduleWithFixedDelay(() -> { List<Integer> integers = new ArrayList<>(); for (int i = 0; i < 3; ++i) { integers.add(new Random().nextInt(10)); } list.set(integers); System.out.println("now list = " + integers.toString());
}, 0, 5, TimeUnit.SECONDS);
while (true) { int target = 2; System.out.println(list.get().contains(target)); Thread.sleep(1000); } }
}
|
要活学活用啊亲.
完.
ChangeLog
2019-01-28
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客——>呼延十