2011-10-21 27 views
5

He estado intentando aprender patrones de diseño. This site usa la palabra clave synchronized, pero no entiendo lo que hace.¿Qué significa "sincronizado" en Java?

He buscado en la red y encontré que está relacionado de alguna manera con el multi-threading y la memoria, pero soy un ingeniero mecánico y no entiendo lo que eso significa.

¿Alguien puede ayudarme a entender los hilos y la palabra clave synchronized?

+3

'synchronized' es java palabra clave específica. –

+1

El código en el enlace no es C++. – Skizz

+1

El primer punto es que las muestras de código a las que se ha vinculado son Java, no C++. –

Respuesta

12

No hay palabra clave synchronized en C++.

Hay uno en Java, sin embargo, donde por métodos it means the following two things:

  • No es posible que dos invocaciones de métodos sincronizados en el mismo objeto para intercalar. Cuando un hilo está ejecutando un método sincronizado para un objeto, todos los otros hilos que invocan métodos sincronizados para el mismo bloque de objetos (suspenden la ejecución) hasta que el primer hilo termina con el objeto.
  • Cuando sale un método sincronizado, establece automáticamente una relación de pase previo con cualquier invocación posterior de un método sincronizado para el mismo objeto. Esto garantiza que los cambios en el estado del objeto sean visibles para todos los hilos.

Similar rules apply to arbitrary blocks.

Además, recomiendo aprender de un libro revisado por pares, no de un sitio arbitrario no autorizado.

+0

muchas gracias @tomalak :) –

+0

@CAD_coding: Ningún problema –

8

En el ejemplo (Java)

public static synchronized Singleton getInstance() 

significa que sólo un hilo a la vez debe ser capaz de acceder al método getInstance() esto para evitar una condición de carreras.

+0

Solo _per-object._ –

+0

@anders muchas gracias que fue muy útil –

3

Como ya han señalado los comentaristas, synchronized es una palabra clave de Java.

Significa que el método no puede ejecutarse por dos hilos al mismo tiempo y la JVM se encarga de aplicarlo.

En C++, tendrá que usar alguna construcción de sincronización, como una sección crítica o un mutex. Puede consultar this.

0

Si un subproceso intenta leer los datos y otro subproceso intenta actualizar los mismos datos, conduce al estado inconsistente .

Esto se puede evitar sincronizando el acceso a los datos. Uso “sincronizado” método:

public synchronized void update() 
{ 
… 
} 
Cuestiones relacionadas