Scala 中的同步
Suraj P
2023年1月30日
在本文中,我们将学习 Scala 中的同步。
在当今的场景中,许多应用程序需要支持并发性和并行性。因此,当我们有多个进程或线程在共享资源上工作时,我们需要一种机制来避免任何不一致。
这就是同步发挥作用的地方。
Scala 中 synchronized
的语法
我们可以使用 Java 类在 Scala 中实现同步。
语法:
synchronized{
//our code here
}
我们可以使用 Scala 的 synchronized
关键字创建一个同步块。在这个块中,我们可以编写我们想要同步的代码。
这样可以防止我们的资源同时被多个线程修改,保持数据的一致性。
在 Scala 中使用同步
只要我们有共享资源,我们就可以使用同步,并且我们不希望它们被各种进程/线程同时修改。这在现实世界中至关重要,因为交易或计算取决于其他数据。
如果我们不同步,可能会导致不一致。
让我们以银行交易为例来更好地理解这一点。
假设 A 和 B 可以访问我们的联名账户,里面有 2000 美元。现在,他们俩都想同时取款,但这是不可能的,因为一次只有一个人可以取款。
因此,作为共享资源的帐户必须锁定一段时间。当第一个人,比如说 B,完成他们的操作时,我们只释放锁并允许其他人访问资源,这样就不会发生任何不一致。
在 Scala 中使用同步时,我们必须牢记以下几点:
- 它使程序的执行时间非常慢,因为一次只允许一个线程或进程访问共享部分,并且可能有数千个这样的线程试图访问资源。
- 在同步期间,执行一个线程持有锁,因此没有其他人可以进入数据的共享部分,也称为临界区。同时,所有其他线程进入等待状态,直到当前线程完成执行。
- 只有当我们依赖于先前的值时才应该使用同步方法,在并发和多道程序环境中影响我们的当前值。
示例代码:
object workspace extends App {
synchronized {
println("We are synchronizing")
for (i<- 0 to 5) {
println(i)
}
}
}
我们将在同步块内打印从 0 到 5 的整数值。
输出:
We are synchronizing
0
1
2
3
4
5
结论
我们通过同步来避免应用程序中的数据不一致,但这会使我们的应用程序变慢一些,因为一次只有一个线程可以执行该块。
当使用相同代码和线程的不同实例可以在它们上运行的多核和并行分布式处理系统时,可以避免这种情况。