Java中在使用多线程时方法加Lock的问题?

Java中在使用多线程时,调用的方法计算比较复杂。为了避免线程之间数据混乱,使用了Lock,但是这就导致失去了多线程应该有效果,有什么方法能够解决吗?

尽量减少Lock的范围,尽量早UnLock,比如只在需要共享的数据之间Lock,这样其他地方可以实现多线程的并行。或者就是把数据尽量拆分开,不共享

多线程加锁的话,你就变成了单线程写入操作了吧,那样多线程就没有什么意义了,一般如果是求和之类的,用原子加减之类的方法,就能避免并发冲突的情况。你可以找一下原子加之类的方法

这就要看Lock的颗粒度范围了,如果你是对整个处理进行同步阻塞,那对这一整个处理而言就失去了并行的意义;
但你可以只针对共享资源相关的部分处理进行Lock,这样还是可以达到提高效率的目的的。

看你的计算是什么样子的,如果是for循环,可以分开执行,0,2,4,。。。;1,3,5.。。这样分组,不同线程执行不同的索引组,然后再合并一起。

你要多线程还要加锁本来就是自相矛盾的,还是要分析一下具体的计算,看哪些部分可以分别计算,需要汇总的时候可以回到主线程。

部署多个服务,实现并行

你的需求是自相矛盾的!最好能把你要算的东西拿出来让大家一起分析一下看看能不能并行处理。
单线程处理的东西强制分成多线程然后再用lock同步,这效率反而比单线程更低。

一般 不是用同步关键字吗?

对于多线程操作来说,原子操作是最合适的

尽量使用多线程容器
对于耗时时间别人长的业务逻辑,采用加锁的方式
对于耗时时间短的,采用ato原子类方式