你熟悉多线程,请举例说明你在项目中如何正确使用线程池,以及遇到过哪些线程安全问题?

在项目中,需要批量处理用户积分变动(如每日积分汇总)。我创建了自定义线程池,使用CallerRunsPolicy拒绝策略,避免任务丢失。

线程安全问题:多个线程同时更新同一个用户的积分余额时,会出现数据不一致。解决方案:使用AtomicInteger或ConcurrentHashMap的原子操作,或者对关键代码块加ReentrantLock。更彻底的是将更新操作放到Redis中通过Lua脚本保证原子性。