Wesley13 Wesley13
3年前
jdk1.8之后,Collection中的removeIf()方法,可以对list和set 中符合条件的数据进行删除
以前我们对list中数据进行删除操作时基本都是使用迭代器,这种方式实现起来比较复杂,要写好几行代码才能做到,而且像我这种记性还经常忘记具体怎么写,还要百度,最近发现一种非常简单的方式。就是Collection中的removeIf()方法。他是在jdk1.8后加入的。看下它的源码。defaultbooleanremoveIf(Pred
Wesley13 Wesley13
3年前
Java并发编程的艺术笔记(四)——ThreadLocal的使用
ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。目的就是为了让线程能够有自己的变量可以通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值
Stella981 Stella981
3年前
Apple Silicon Mac 上的 iPad 与 iPhone App 运行
作者:我就是御姐我摊牌了,iOS/Flutter开发者,目前就职于美团,负责探索Flutter在业务容器上的落地实践Sessions:https://developer.apple.com/videos/play/wwdc2020/10114/今年WWDC最为重磅的消息可能就是ApplieSilicon
Stella981 Stella981
3年前
Guava Lists.transform的一个小坑
    最近在修改项目中bug的时候遇到一个问题,需要修改一个list里的值,但是不管怎么set值,最后序列化的结果都是原来的值。百思不得其解,最后点开返回list的代码,看到里面用了Guava的Lists.transform做了类型转换,才恍然大悟。因为之前听说过Guava的Lists.transform方法有个坑,于是趁机研究下源码。publ
Stella981 Stella981
3年前
Redis 持久化 笔记
接触redis并不久,做项目的时候,也大概的操作罢了,比如set,get..~等等的基础操作,大概小喽啰是够用了最近大佬问我,你的redis数据有做持久化吗?我的想法..~设置了有效时间的key是未持久化的,永久的key就是持久化的大佬一个劲的在嘲笑,尴尬...偷偷笑,有我这么想.肯定还有人起步也这么认为的,哈哈哈于是学习一下redis
Wesley13 Wesley13
3年前
Java多线程并发常用类实例之:Condition
        作为一个示例,假定有一个绑定的缓冲区,它支持 put 和 take 方法。如果试图在空的缓冲区上执行 take 操作,则在某一个项变得可用之前,线程将一直阻塞;如果试图在满的缓冲区上执行 put 操作,则在有空间变得可用之前,线程将一直阻塞。我们喜欢在单独的等待set中保存 put 线程和 take 线程,这样就可
Stella981 Stella981
3年前
Redis 事务(8)
为什么要用事务Redis的单个命令是原子性的(比如getsetmgetmset),如果涉及到多个命令的时候,需要把多个命令作为一个不可分割的处理序列,就需要用到事务。例如我们之前说的用setnx实现分布式锁,我们先set,然后设置对key设置expire,防止del发生异常的时候锁不会被释放,业务处理完了以后再del,这三个动作我们就
Stella981 Stella981
3年前
CopyOnWriteArrayList 介绍
CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的