admin 管理员组

文章数量: 1087139


2024年4月27日发(作者:retype)

scala synchronized详细讲解

一、什么是Scala Synchronized?

Scala的Synchronized是scala语言里提供的一种同步方式,

它可以帮助程序员控制多线程对共享变量的访问,从而避免产生竞争

现象。Synchronized通过使用一个关键字“synchronized”来实现

线程安全。

二、Synchronized的使用方式

1、使用synchronized代码块

synchronized关键字可以用来标记一段指定的代码块,用来实

现同步,使用方式如下:

synchronized{

//要执行的代码

}

在代码块被标记了synchronized后,当一个线程进入

synchronized代码块,其余线程都会被阻塞,直到第一个线程离开

时,第二个线程才可以进入。

2、使用synchronized方法

scala也支持可以用synchronized关键字来标记一个方法,使

它变成同步方法,使用方式如下:

def synchronized methodName(parameters){

//方法体

}

这种方式使用起来比较简单,但是使用不当会导致性能问题。

3、使用Java的synchronized

Scala也可以使用Java的synchronized,使用方式如下:

import antLock

val lock = new ReentrantLock()

onized{

//要执行的代码

}

使用这种方式可以更灵活的控制锁的执行和释放,但是性能又略

低了一些。

三、Synchronized的一些注意事项

1、Synchronized必须配合可变的变量使用

Synchronized只会为可变变量提供同步,要是不可变变量,

Synchronized无法为其产生任何作用。

2、Synchronized只能锁定对象,而不能锁定类

Synchronized可以锁定一个对象,也可以锁定一个类,但是两

者是有区别的。锁定对象的作用是让同一时刻只有一个线程访问此对

象,而锁定类的作用是让同一时刻只有一个线程访问整个类。

3、Synchronized会降低性能

由于Synchronized的加锁机制,会导致访问受限,所以会导致

性能降低,应尽量减少同步代码块的使用。

四、Synchronized的优缺点

优点:

1、可以保证线程安全,避免共享变量之间的竞争现象;

2、可以控制多个线程的并发访问,保证多个线程按照顺序来完

成;

3、可以简单实现线程同步;

缺点:

1、会降低性能;

2、可能引发死锁问题;

3、可能导致程序出现不可预期的行为。


本文标签: 线程 使用 访问 导致