tag

Java

共 734 篇文章。
全部文章JavaGo书稿TypeScript游戏开发独立开发者小游戏游戏设计Godot性能优化RustKafkaPython游戏引擎
books

《Java 并发编程·线程与内存模型》12.3 分治拆分、阈值与异常

阈值同时决定任务数和叶子成本:切太小,任务对象与调度开销吃掉收益;切太大,叶子里的插入排序退化成平方复杂度。本机 100 万元素归并排序实测,阈值 1 是 140ms、16 是 21ms、65536 是 1629ms,顺序版 105ms。文末用实测输出说明异常如何跨线程包装,以及 cancel 为什么停不下正在跑的叶子。

9 分钟阅读
书稿 Java 并发编程
books

《Java 并发编程·线程与内存模型》12.2 并行流的边界与 commonPool 陷阱

parallel() 只多了一个方法调用,却把用哪个池、拆多细、有没有副作用三件事都藏了起来。本机实测:同样 20 个 10ms 任务,commonPool 空闲时 31ms,被阻塞任务占满后 276ms;1000 个元素的并行流比顺序流慢 2.49 倍;36 个阻塞任务在 commonPool 上 1231ms,换成 16 线程的自定义池 916ms。

10 分钟阅读
书稿 Java 并发编程
books

《Java 并发编程·线程与内存模型》11.3 调度漂移、幂等与补偿

固定频率和固定延迟的分母不同:前者对齐计划时刻,后者从执行结束开始算。本机实测同一个 200ms 周期、80ms 耗时的任务,fixedRate 六次的落后量稳定在 1–9ms,fixedDelay 则从 82ms 一路涨到 444ms;单次执行超过周期时,fixedRate 不丢弃欠账而是背靠背补跑。文末给出幂等键与补偿的落地写法。

11 分钟阅读
书稿 Java 并发编程
books

《Java 并发编程·线程与内存模型》11.1 Timer 的缺陷与 ScheduledThreadPoolExecutor

Timer 只有一条线程、一个异常就能让它彻底停摆,还把相对延迟换算成墙上时钟的绝对时刻。三个实验对照:慢任务把后续任务从 50ms 推到 317ms;抛异常后 Timer 线程死亡、700ms 内只跑了 1 次,而 STPE 里健康任务照跑 8 次;字节码显示两者分别取 currentTimeMillis 与 nanoTime。

9 分钟阅读
书稿 Java 并发编程
books

《Java 并发编程·线程与内存模型》10.2 队列与拒绝策略

队列满、线程到顶之后发生什么,取决于拒绝策略。本节实测四种 JDK 拒绝策略在同一场景下的不同结果,解释 CallerRunsPolicy 如何在调用线程上形成反压、它在什么条件下会失效,并用无界队列实验证明 max 参数如何被架空,最后给出有界队列容量的推导方法与可记录指标的自定义拒绝策略。

11 分钟阅读
书稿 Java 并发编程