多线程学习(三):线程通知&等待机制
1. wait()/notify()的基本使用 wait()/notify()只能在synchronized同步代码块中使用 synchronized(锁对象) {
锁对象.wait();
}
synchronized(锁对象) {
锁对象.notify();
}
调用wait()方法的线程
多线程学习(二):线程安全问题
当线程执行到同步代码块时,会尝试获取锁对象的锁,以确保代码块在同一时间只能被一个线程执行。 1. 问题引入 同时开启两个线程,对同一个资源进行操作,线程之间互相干扰 什么是线程安全问题? 多线程同时修改同一资源,线程之间互相干扰,就会产生线程安全问题 public class ThreadSafe1
多线程学习(一):线程创建的方式
使用多线程时,不同方式最终都通过调用 Thread 类的 start 方法启动线程 1. 继承Thread类 继承Thread类 重写run()方法 需要执行的代码写在方法体中 调用start()方法 public class ThreadCreate1 extends Thread{
Steam找回游戏库 同一驱动器添加多个游戏库
因为网络问题,我不得不重装了电脑系统。当然只格式化了系统盘,游戏并没有被删除。我重新安装了Steam,安装的位置和游戏库的位置是同一个驱动盘,我发现我没法将以前的游戏库添加Steam中(图1)。 存储空间打开方式:Steam主页 -> 左上角Steam -> 设置 -> 左侧存储空间 经过一番查找,
Redis学习(六):使用BitMap实现用户签到
1. BitMap的常用命令 SETBIT 向指定位置存入0或1 127.0.0.1:6379> SETBIT demo 0 1
(integer) 0
GETBIT 获取指定位置的bit值 127.0.0.1:6379> GETBIT demo 0
(integer) 1
BITFIELD
Redis学习(五):GEO数据结构的应用
1. 基本命令 GEOADD 127.0.0.1:6379> GEOADD university 118.095049 24.579985 "jmu" 118.304729 24.608969 "hqu" 118.083051 24.608003 "xmu"
(integer) 3
127.0.0
Redis学习(四):实现Feed流Timeline模式
Feed流简单理解 简单理解:Feed流 → 推送流 → 下拉(上拉)刷新 两种模式: Timeline: 不做内容筛选,简单的按照内容发布时间排序,常用于好友或关注。例如朋友圈 智能排序:利用智能算法屏蔽掉违规的、用户不感兴趣的内容。推送用户感兴趣信息来吸引用户 1. 实现Timeline的三种方
秒杀商品业务实现逻辑
1. 基本实现 1.1 代码实现 @Override
public Result seckillVoucher(Long voucherId) {
// 1.查询优惠券
SeckillVoucher voucher = seckillVoucherService.getById(vo
Redis学习(三):全局唯一ID
1. 全局唯一ID的特性 全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性: 唯一性 高可用性 递增性 安全性 高性能 2. Redis生成全局唯一ID分析 在Redis中,可以使用incr命令将某个键的值加1,这个操作是原子性的,能够有效解决并发问题。 然而,直接
Redis学习(二):查询缓存
什么是缓存? 在我们的日常生活中,总会有一些“常用但重复”的操作,比如每天早晨都去同一家早餐店吃饭。如果老板聪明,看到你过来,就提前准备好你常点的豆浆和油条。这种行为,在技术上有一个类似的概念,叫做缓存。 缓存就是提前把“经常被需要的东西”放在离我们最近、最快的地方,比如内存,而不是每次都去慢腾腾的