2008-10-20 12 views

Respuesta

9

De acuerdo con este sitio: http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_CSharp_lock_and_Java_synchronized, C# y Java locksynchronized bloques de código son "semánticamente idénticos", mientras que para los métodos, Java utiliza synchronized mientras que C# utiliza un atributo: [MethodImpl(MethodImplOptions.Synchronized)].

+0

No, "semánticamente idéntico" es lo que necesitaba escuchar ... y si hubo algún "truco", pero esa página parece ser bastante claro. Gracias. Stackoverflow es mi nuevo Google. ;) – Epaga

5

Una diferencia interesante no cubierto en el enlace publicado por Keeg: por lo que yo sepa, no hay ningún método equivalente llama en Java para .NET de Monitor.Enter y Monitor.Exit, que la declaración de C# lock se reduce a. Eso significa que tampoco puede hacer el equivalente a Monitor.TryEnter, aunque, por supuesto, el paquete java.util.concurrent.locks (a partir de 1.5) tiene una variedad de bloqueos que tienen más funciones disponibles.

-1

I java no tiene que preocuparse por el bloqueo de los tipos públicos que posee.

En .NET, have to

Actualizado: esto es para tipos que le pertenecen. Bloquear en tipos públicos que no le pertenecen es malo en cualquier idioma :)

+2

No, todavía es una mala idea bloquear las referencias públicas en Java también. ¿Qué te hace pensar que está bien en Java? –

+0

Si bien es un enlace interesante, de manera absoluta (y explícita) no se trata el tema del bloqueo de tipos públicos. Lo cual estoy de acuerdo en que no debes hacer ... es una pena que así lo haga [MethodImpl] ... –

+1

encerrar algo público y esperar a que un idiota también lo bloquee. –

Cuestiones relacionadas