Synchronized với annotation @Synchronized của Project Lombok – Hướng Dẫn Java

Để tránh việc nhiều thread sử dụng một phương thức tại một thời điểm, chúng ta thường khai báo phương thức sử dụng keyword synchronized của Java, ví dụ như sau:

1

2

3

4

5

6

7

8

package

com

.

huongdanjava

.

lombok

;

 

public

class

Example

{

 

    

public

synchronized

int

calculate

(

int

a

,

int

b

)

{

        

return

a

+

b

;

    

}

}

Project Lombok cũng cung cấp một cách an toàn hơn để làm điều này bằng cách sử dụng annotation @Synchronized.

1

2

3

4

5

6

7

8

9

10

11

package

com

.

huongdanjava

.

lombok

;

 

import

lombok

.

Synchronized

;

 

public

class

Example

{

 

    

@Synchronized

    

public

int

calculate

(

int

a

,

int

b

)

{

        

return

a

+

b

;

    

}

}

Với annotation này, Lombok sẽ generate một private field tên là $lock cho phương thức nonstatic và một private field tên là $LOCK cho phương thức static. Điều này sẽ an toàn hơn bởi vì nó sẽ cho phép chúng ta lock phương thức sử dụng một instance field thay vì chính phương thức đó.

Nếu các bạn kiểm tra tập tin Example.class nằm trong thư mục /target/classes/com/huongdanjava/lombok, các bạn sẽ thấy nội dung của class Example được generate như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//

// Source code recreated from a .class file by IntelliJ IDEA

// (powered by Fernflower decompiler)

//

 

package

com

.

huongdanjava

.

lombok

;

 

public

class

Example

{

    

private

final

Object

$

lock

=

new

Object

[

0

]

;

 

    

public

Example

(

)

{

    

}

 

    

public

int

calculate

(

int

a

,

int

b

)

{

        

Object

var3

=

this

.

$

lock

;

        

synchronized

(

this

.

$

lock

)

{

            

return

a

+

b

;

        

}

    

}

}