我是多线程技术的初学者,对此有疑问:
在Java中,传统的Synchronization(使用synced关键字)是否还有其他替代方法,因为它会影响应用程序的性能?
答案 0 :(得分:4)
正如其他人所指出的,这取决于您要避免的事情以及您要通过多线程实现的事情。
如果您的意思是“是否存在使用共享资源进行多线程的零开销方法”,那么答案几乎肯定是“否”。如果两辆朝不同方向行驶的汽车同时驶近一个交叉路口,那么其中一辆将不得不等待另一辆汽车-不可能让这些汽车同时占据相同的空间。这就是为什么我们有停车标志和交通信号灯的原因。 (或者,像交通圈这样的东西,但是即使那些交通圈也有一些开销-您真的不能像他们不在那里那样全速浏览它们。)
除了使用这种类型的同步之外,还有许多其他方式可以执行异步和并行操作:
还有许多其他类型的并发,例如actor model。
如果使用得当,它们可以帮助最大程度地减少开销,并可能减少所需的显式锁定和同步量。他们都有开销。
TL; DR 无论您做什么,都将产生开销-只需选择设计和原语,以使特定用例的开销最小。