2008-10-20 11 views

Antwort

9

Nach dieser Seite: http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_CSharp_lock_and_Java_synchronized, C# lock und synchronized Codeblocks Java sind "semantisch identisch", während für Methoden, Java synchronized verwendet, während C# ein Attribut verwendet: [MethodImpl(MethodImplOptions.Synchronized)].

+0

Nein, "semantisch identisch" ist, was ich hören musste ... und ob es irgendwelche "gotchas" gab, aber diese Seite scheint zu sein ziemlich klar. Vielen Dank. Stackoverflow ist mein neues Google. ;) – Epaga

5

Ein interessanter Unterschied nicht in den Link gepostet von Keeg bedeckt: soweit mir bekannt ist, gibt es kein Äquivalent Methode für .NET ist in Java ruft Monitor.Enter und Monitor.Exit, die die C# lock Erklärung läuft darauf hinaus. Das heißt, Sie können nicht das Äquivalent von Monitor.TryEnter entweder - obwohl natürlich die java.util.concurrent.locks-Paket (ab 1.5) hat eine Vielzahl von Sperren, die mehr Funktionen zur Verfügung haben.

-1

In Java müssen Sie sich nicht darum kümmern, öffentliche Typen zu sperren, die Ihnen gehören.

In .NET Sie have to

Aktualisiert: dies ist für die Typen, die Sie besitzen. Sperren auf öffentlichen Typen, die Sie nicht besitzen, ist in jeder Sprache schlecht :)

+2

Nein, es ist immer noch eine schlechte Idee, öffentliche Referenzen in Java zu sperren. Was lässt dich denken, dass es in Java in Ordnung ist? –

+0

Während es ein interessanter Link ist, diskutiert es absolut (und angeblich) nicht das Thema der Sperrung öffentlicher Typen. Wem ich zustimme, sollte das nicht tun ... es ist eine Schande, dass [MethodImpl] es so macht ... –

+1

Vergesst etwas Öffentliches und wartet darauf, dass ein Idiot auch ein Deadlocking-Lock auflegt. –

Verwandte Themen