面试题:分布式环境中,确保线程安全(并发问题)

避免并发

在分布式环境中,如果存在并发问题,那么很难通过技术去解决,或者解决的代价很大,所以我们首先要想想是不是可以通过某些策略和业务设计来避免并 发。比如通过合理的时间调度,避开共享资源的存取冲突。另外,在并行任务设计上可以通过适当的策略,保证任务与任务之间不存在共享资源,比如在以前博文中 提到的例子,我们需要用多线程或分布式集群来计算一堆客户的相关统计值,由于客户的统计值是共享数据,因此会有并发潜在可能。但从业务上我们可以分析出客 户与客户之间 数据是不共享的,因此可以设计一个规则来保证一个客户的计算工作和数据访问只会被一个线程或一台工作机完成,而不是把一个客户的计算工作分配给多个线程去 完成。这种规则很容易设计,例如可以采用hash算法。

 保证一些共享数据在一个线程更新时从开始到结束,其他线程不能占用,这个可以通过Synchronized代码块实现。以避免更新过程中出现的脏读。

2 参考JUC的一些封装,可以有一些优化的思路,比如对一些存储区域分区锁定。但是这需要首先分析清楚哪些共享变量是需要一起同时更新的,分开的。深入的后续再分析。

猜你喜欢

转载自www.cnblogs.com/shan1393/p/9001244.html