Retrain代码分析
<aside> 😀 这里写文章的前言: Retrain代码分析,包含线程锁,OSS搬运,图片标签处理,通知发送 </aside> ReentrantLock是Java中的一个可重入锁实现,它是Lock接口的一个实现类。"可重入"意味着同一个线程可以多次获取同一把锁而不会死锁。主要特点包括: 可重入性: 允许同一个线程多次获取同一把锁。 公平性选择: 支持公平锁和非公平锁。公平锁按照申请锁的顺序获取锁,非公平锁则允许"插队"。 可中断性: 等待获取锁的线程可以被中断。 超时机制: 支持尝试获取锁的超时机制。 条件变量: 通过newCondition()方法可以获得Condition对象,实现线程间的协调。 锁投票: 通过方法如tryLock()可以尝试非阻塞地获取锁。 性能: 在大多数情况下,ReentrantLock的性能优于synchronized关键字。 使用ReentrantLock时,通常的模式是: ReentrantLock lock = new ReentrantLock(); lock.lock(); try { // 临界区代码 } finally { lock.unlock(); } 📝 主旨内容 detailed-code-explanation.md 详细代码解释 1. sendRetrain 方法 @Override public SendRetrainImageResult sendRetrain(SendRetrainParam retrainParam) { String currProjectId = this.getProjectId(retrainParam.getHostName(), retrainParam.getProjectId()); if (currProjectId == null) { throw new RuntimeException("找不到对应的projectId"); } retrainParam.setProjectId(currProjectId); ReentrantLock reentrantLock...