关注
sleep 和 wait 的区别
- 归属与基础特性: sleep 是 Thread 类方法, wait 是 Object 类方法 。这意味着调用方式不同, sleep 直接通过 Thread.sleep() 调用,而 wait 需通过对象实例调用。
- 锁相关行为: sleep 执行时,线程不会释放它持有的锁。比如多个线程访问共享资源并加锁,一个线程执行 sleep 仍占有锁,其他线程只能等待。 wait 则会释放锁,使其他线程有机会竞争锁,进入原本被占用的资源。
- 使用场景与唤醒机制: sleep 单纯让线程暂停一段时间,时间到了自动恢复执行。 wait 用于线程间协作,需其他线程调用 notify 或 notifyAll 唤醒,或设置超时时间到了唤醒。
- 同步限制: wait 必须在 synchronized 修饰的代码块中使用,否则报错。 sleep 无此限制,可在任何地方调用。
Java 序列化及使用场景
- 概念:序列化是把Java对象转化为字节流,方便在网络传输或存储到文件等,反序列化则是逆过程,把字节流变回对象。
- 实现方式:类实现 Serializable 接口就可序列化,该接口没方法,只是标记。用 transient 关键字修饰字段,可不参与序列化。定义 serialVersionUID 用于版本兼容性,若反序列化时类的 serialVersionUID 与序列化时不一致,可能报错。
- 使用场景:网络传输中,像RPC调用传递对象;持久化存储,如将对象存到文件或数据库缓存;实现对象深拷贝;分布式系统中Session对象跨节点共享。但要注意序列化可能泄露敏感数据,静态和 transient 修饰字段不被序列化,且会影响性能。
动态代理
- 概念:程序运行时动态创建代理类,无需提前编写代理代码,在不修改目标类代码情况下,为目标对象添加功能。
- 实现方式:
- JDK 动态代理:要求目标类必须实现接口。通过 InvocationHandler 接口定义代理逻辑, Proxy 类生成代理对象。
- CGLIB 动态代理:可代理没有接口的类,通过继承目标类实现。核心类是 MethodInterceptor ,用于拦截方法调用并添加代理逻辑。
- 应用场景:面向切面编程,在不修改业务代码情况下添加日志记录、事务管理、权限控制等功能;延迟加载,如Hibernate中按需加载关联对象;远程调用,在客户端生成代理对象,封装远程调用细节。
- 两者比较:JDK动态代理基于接口,调用速度快但代理类生成慢;CGLIB基于继承,代理类生成快但调用稍慢。JDK动态代理无需第三方库,CGLIB需引入相关库。
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26届的你,投了哪些公司? #
16997次浏览 205人参与
# 我对___祛魅了 #
27346次浏览 266人参与
# 中兴秋招 #
194223次浏览 2172人参与
# 你最讨厌面试问你什么? #
11406次浏览 168人参与
# 你跟室友的关系怎么样? #
3052次浏览 59人参与
# 工作中哪个瞬间让你想离职 #
45536次浏览 401人参与
# 简历上的经历如何包装 #
11098次浏览 347人参与
# 你遇到最难的面试题目是_ #
4123次浏览 78人参与
# 如何快速融入团队? #
9752次浏览 120人参与
# 和同事相处最忌讳的是__ #
13288次浏览 137人参与
# 通信/硬件求职避坑tips #
85991次浏览 868人参与
# 什么样的背景能拿SSP? #
15250次浏览 122人参与
# 毕业后不工作的日子里我在做什么 #
190258次浏览 1633人参与
# 应届生应该先就业还是先择业 #
124845次浏览 695人参与
# 字节跳动工作体验 #
458391次浏览 4625人参与
# 如何排解工作中的焦虑 #
190543次浏览 1958人参与
# 多益网络求职进展汇总 #
30954次浏览 138人参与
# 总结:哪家公司面试体验感最差 #
63232次浏览 287人参与
# 元戎启行求职进展汇总 #
35963次浏览 278人参与
# 我和mentor的爱恨情仇 #
61797次浏览 378人参与
# 实习生活中那些难忘的瞬间 #
164109次浏览 2439人参与