reupe

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

摘要: 电子游戏过去都会有一个“记录”或者“存盘”的功能,就是当玩家在游戏过程中将当前的游戏状态记录下来,以便于之后重新登录游戏后读取到记录时的状态。这种将对象的状态先保存起来,以后再根据保存的数据恢复对象状态的设计模式,就是备忘录模式。 1. 备忘录模式 备忘录模式的UML类图为: Originator: 阅读全文
posted @ 2019-03-28 19:41 yxlaisj 阅读(268) 评论(0) 推荐(0) 编辑

2020年1月21日

摘要: 死锁,就是当两个以上的任务,双方都在等待对方完成释放资源,但是没有一方提前退出时,就称之为死锁。 哲学家吃饭问题 假设有3名哲学家在圆桌上准备吃面条,现在,只有3根筷子(不是三双),只有同时拥有2根(一双)筷子的哲学家才能吃,另外的人需要等待他吃完释放筷子。这里面: 资源: 指的就是筷子 任务: 每 阅读全文
posted @ 2020-01-21 16:48 yxlaisj 阅读(172) 评论(0) 推荐(0) 编辑

2020年1月20日

摘要: BlockingQueue的继承结构 BlockingQueue是线程安全的阻塞队列,当队列为空时,拉取队列的线程会等待队列中重新有元素;当队列满时,添加元素的线程会等待队列有空位储存新元素。BlockingQueue的继承接口如下: 生产者-消费者模式 ArrayBlokingQueue实现类需要 阅读全文
posted @ 2020-01-20 17:43 yxlaisj 阅读(219) 评论(0) 推荐(0) 编辑

2020年1月17日

摘要: sleep()和yield()方法,不会释放锁,而wait()方法会释放当前线程的锁,所以,wait()方法必须是在同步代码块中调用。 应用场景 多个线程合作执行某项任务的时候,有线程A和线程B,它们使用同一对象锁,同一时间它们只有其中之一可以运行,另外一个线程处于等待状态。如下事件图表所示 线程A 阅读全文
posted @ 2020-01-17 15:02 yxlaisj 阅读(1209) 评论(0) 推荐(0) 编辑

2020年1月15日

摘要: 启动应用,即开启一个进程,其中会有很多线程在跑,main线程即使执行完毕,子线程可能还在执行。如果想强制终止本次进程,使用System.exit(0)。 阅读全文
posted @ 2020-01-15 20:13 yxlaisj 阅读(1275) 评论(0) 推荐(0) 编辑

2020年1月14日

摘要: 从网上看到的线程的六种状态图,很清晰地展示了各个状态之间的切换以及可能的方法。 BLOCKED和WAITING的区别 BLOCKED: 一般指的是被动阻塞,比如一个线程在synrhonized同步代码块外尝试获取锁时的阻塞; WAITING: 一般指的是主动进入等待状态,比如调用sleep,wait 阅读全文
posted @ 2020-01-14 19:49 yxlaisj 阅读(146) 评论(0) 推荐(0) 编辑

2020年1月10日

摘要: 经常有这样一个问题: int j; for(int i = 0; i < 1000; i++){ j = j++; } System.out.println(j); // 输出0 为什么无论循环多少次,j都为0? 原因有两点: 1. 对于j++, java会使用中间缓存机制,先把j记到缓存 2. " 阅读全文
posted @ 2020-01-10 09:52 yxlaisj 阅读(499) 评论(0) 推荐(0) 编辑

2020年1月5日

摘要: 1. 为什么使用ThreadLocal? 假设我们开发某平台服务,提供一系列接口,客户访问时需要必须传入user信息,服务端最好是将user信息保存为全局变量,一边在处理某一次请求的过程中能够随时获取,而无需费力进行参数的透传。对于服务端而言,每一个请求,就是一个线程,而每个请求传来的user信息, 阅读全文
posted @ 2020-01-05 20:27 yxlaisj 阅读(343) 评论(0) 推荐(0) 编辑

2020年1月1日

摘要: 1. 基本概念 程序运行过程中,两个或多个线程(thread)并发执行并共享某个资源时,可能对共享资源不同步地修改,造成数据错误(所谓错误,就是修改后的数据不符合预期),为了避免数据错误,普遍采用了线程同步技术,所谓同步,就是避免多个线程毫无规则地征用资源,而是使这些线程看起来像是步调一致、有序地使 阅读全文
posted @ 2020-01-01 10:57 yxlaisj 阅读(327) 评论(0) 推荐(0) 编辑

2019年11月8日

摘要: 比如这断程序: char word = '字'; System.out.println("字".getBytes().length); // 输出为 3 其输出结果为3, 小伙伴们就要问了:“奇怪了,'字'这个字符,明明是三个字节,怎么可以用char类型的变量来表示? char类型不是在java中是 阅读全文
posted @ 2019-11-08 19:24 yxlaisj 阅读(2311) 评论(1) 推荐(0) 编辑

2019年9月8日

摘要: 虽然面向应用开发的程序员很少直接使用动态代理技术,但是诸如AOP,事务控制,Spring容器注入等等,实际上都是基于动态代理实现的,可见,动态代理是多么重要。这篇随笔记录了我对动态代理技术原理的一两点理解。 1. 什么是代理 1.1 什么是代理 下图所示为一般地代理模式类图,实际上,代理proxy代 阅读全文
posted @ 2019-09-08 19:47 yxlaisj 阅读(464) 评论(0) 推荐(0) 编辑