- 博客(18)
- 收藏
- 关注
原创 mac安装jdk
而不是你手动安装的 JDK 8 或 JDK 21。这是 macOS 的一个特殊设计,它会默认指向。,但实际上这是一个提示工具,用于引导用户安装官方 JDK。现在你的 M1 Mac 应该正确运行 JDK 8 了!是 macOS 的 Java 存根,它会自动调用。,说明它没有正确安装,你可能需要重新安装。没有正确生效,检查环境变量是否设置正确。工具来管理 JDK 版本。如果仍然显示 JDK 21,说明。返回的默认 JDK。说明当前系统使用的是。确保只剩下 JDK 8。
2025-03-27 12:42:53
427
原创 创建多少线程才是合适的?
很多人都知道线程数不是越多越好,但是设置多少是合适的,却又拿不定主意。其实只要把握住一条原则就可以了,这条原则就是将硬件的性能发挥到极致。上面我们针对 CPU 密集型和 I/O 密集型计算场景都给出了理论上的最佳公式,这些公式背后的目标其实就是将硬件的性能发挥到极致。对于 I/O 密集型计算场景,I/O 耗时和 CPU 耗时的比值是一个关键参数,不幸的是这个参数是未知的,而且是动态变化的,所以工程上,我们要估算这个参数,然后做各种不同场景下的压测来验证我们的估计。
2023-06-04 23:31:20
221
2
转载 Java线程的生命周期
理解 Java 线程的各种状态以及生命周期对于诊断多线程 Bug 非常有帮助,多线程程序很难调试,出了 Bug 基本上都是靠日志,靠线程 dump 来跟踪问题,分析线程 dump 的一个基本功就是分析线程状态,大部分的死锁、饥饿、活锁问题都需要跟踪分析线程的状态。同时,本文介绍的线程生命周期具备很强的通用性,对于学习其他语言的多线程编程也有很大的帮助。
2023-06-04 13:47:31
119
转载 管程:并发编程的万能钥匙
不知道你是否曾思考过这个问题:为什么 Java 在 1.5 之前仅仅提供了 synchronized 关键字及 wait()、notify()、notifyAll() 这三个看似从天而降的方法?在刚接触 Java 的时候,我以为它会提供信号量这种编程原语,因为操作系统原理课程告诉我,用信号量能解决所有并发问题,结果我发现不是。后来我找到了原因:Java 采用的是管程技术,synchronized 关键字及 wait()、notify()、notifyAll() 这三个方法都是管程的组成部分。
2023-06-03 16:30:09
90
转载 安全性、活跃性以及性能问题
并发编程是一个复杂的技术领域,微观上涉及到原子性问题、可见性问题和有序性问题,宏观则表现为安全性、活跃性以及性能问题。我们在设计并发程序的时候,主要是从宏观出发,也就是要重点关注它的安全性、活跃性以及性能。安全性方面要注意数据竞争和竞态条件,活跃性方面需要注意死锁、活锁、饥饿等问题,性能方面我们虽然介绍了两个方案,但是遇到具体问题,你还是要具体分析,根据特定的场景选择合适的数据结构和算法。
2023-06-01 00:20:21
81
转载 转账该如何加锁?
以下内容只是学习参考,不适用于分布式场景银行业务里面的转账操作,账户 A 减少 100 元,账户 B 增加 100 元。这两个账户就是有关联关系的。那对于像转账这种有关联关系的操作,我们应该怎么去解决呢?我们声明了个账户类:Account,该类有一个成员变量余额:balance,还有一个用于转账的方法:transfer(),然后怎么保证转账操作 transfer() 没有并发问题呢?
2023-05-28 22:50:31
487
6
原创 数据结构与算法分析——求最大公因数的算法
除了对数时间复杂度的算法中提到的欧几里得算法,还有几种求最大公因数的算法。例如,更相减损术和Stein算法。
2022-07-15 00:01:11
370
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人