《Java核心技术 卷1》- 20240714

2024-07-13  本文已影响0人  转岗做JAVA
1.不要调用Thread类或者Runnable对象的run方法。
2.现在线程优先级高度依赖系统。
3. ReentrantLock(可重入)锁可以反复获取已拥有的锁。
4. 条件对象:Condition。
public void transfer(int from, int to, int amount) {
    bankLock.lock();
    try {
        while (accounts[from] < amount) { // 要用while,因为唤醒后还得再次检查条件
            // sufficientFunds = bankLock.newCondition();
            sufficientFunds.await();
            // transfer funds ...
            sufficientFunds.signalAll(); // 会激活等待这个条件的所有线程
        }
    }
}
5. synchronized 关键字(内部对象锁);
6. volatile字段

如果为了能并发读写一两个实例字段,可以不使用锁,而是使用volatile字段实现;

// 无法保证读取、取反和写入操作不被中断;
public void flipDone() { done = !done; } // not atomic
7. stop和suspend方法已经废弃,不要使用;
8. 非线程安全的类可以通过ThreadLocal包装,来让各个线程独立访问;
public static final ThreadLocal<SimpleDateFormat> dateFormat = 
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
String dateStamp = dateFormat.get().format(new Date);
上一篇下一篇

猜你喜欢

热点阅读