<p>Do these two keywords have exactly the same effect, or is there something I should be aware of?</p>

According to this site:
http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_CSharp_lock_and_Java_synchronized
, C#
```
lock
```
and Java
```
synchronized
```
code blocks are "semantically identical", while for methods, Java uses
```
synchronized
```
while C# uses an attribute:
```
[MethodImpl(MethodImplOptions.Synchronized)]
```
.