java教程技术文章
-
synchronized锁的是对象而非变量,关键在于对象头MarkWord中的锁状态标志位;通过JOL可验证其从无锁(001)→偏向锁(101)→轻量级锁(00)→重量级锁(10)的动态升级过程。206 收藏 -
InputStream.read()会阻塞是因为它是同步阻塞调用,需等待有数据可读、流被关闭或到达末尾才返回;在TCP或串口等无明确EOF的场景中,若对端不关闭输出,read()将一直挂起。222 收藏 -
关键在识别哪一层悄悄拆箱,而非定位报错行;三元运算、Stream.collect、算术表达式及方法赋值时易因包装类null触发隐式拆箱NPE,需统一用Optional、Objects工具或注解防控。413 收藏 -
Stream.concat()按输入顺序拼接流,但处理顺序需依赖串行流+forEachOrdered等有序操作保障;多流合并应显式sequential()、避免并行化及无序中间操作。129 收藏 -
锁消除是JVM通过逃逸分析在JIT编译阶段自动移除未逃逸对象的无意义同步操作;前提是对象仅在当前线程内使用且不被外部访问,如局部StringBuffer的append调用。180 收藏 -
锁粒度需平衡:过粗导致线程阻塞,过细则引发伪共享;应缩小同步范围、避免耗时操作、慎用读写锁,并根据硬件与JVM特性综合优化。236 收藏 -
FileVisitOption本身不会导致死循环,但配合符号链接或自引用目录时可能引发无限遍历;推荐优先使用NOFOLLOW_LINKS,并结合深度限制与路径去重确保安全。464 收藏 -
WeakHashMap的key会被自动回收,因为其key用WeakReference包装,GC发现无强引用时会在下次GC后清除对应entry;value为强引用,若value反向持有key会导致内存泄漏。243 收藏 -
长整型在32位系统上非原子读写,因CPU一次仅处理32位,导致64位变量被拆分为高低32位两次操作,多线程并发时可能读到“撕裂”中间态;Java中volatilelong或AtomicLong可保证原子性。465 收藏 -
模块描述符(module-info.java)是模块化系统信任起点,需配合编译约束、签名机制与运行时校验保障变量库交付完整性,包括精确导出控制、版本签名、服务声明、哈希注入及静态断言。456 收藏 -
受检异常必须显式处理,否则编译不通过;运行时异常继承自RuntimeException,编译器不检查;Error代表JVM严重问题,一般不捕获。310 收藏 -
多重边界指泛型类型参数必须同时满足多个上界约束,语法为<TextendsA&B&C>,其中A必须是唯一类(排最前),B/C等为接口;用于组合多种能力,如Comparable与Serializable并存。252 收藏 -
答案:while循环在条件为真时重复执行代码块,需确保循环变量更新以避免死循环。示例中用i从1到5打印数字,循环体每次递增i;若忽略更新则导致无限循环。实际用于读取输入、处理数据流等场景,如持续接收用户命令直至输入“exit”退出,关键在于合理设置初始值、条件判断和变量更新机制。466 收藏 -
Map.merge()仅在键已存在时调用remappingFunction;键不存在则直接put,不执行函数;返回null会删除该键;多线程需用ConcurrentHashMap保证原子性。318 收藏 -
static静态代码块适用于类加载时轻量级核心初始化,如JDBC驱动注册、本地配置加载、不可变常量构建等,但严禁用于网络IO、连接池创建或依赖容器上下文的操作。201 收藏