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需引入相关库。
点赞 评论

相关推荐

投递智联招聘等公司10个岗位
点赞 评论 收藏
分享
积极向上的林同学:把理工改成工业
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务