2011-03-30 38 views
6

¿Cómo sincronizar el método en java que no sea usar palabra clave sincronizada?Otra forma de sincronizar el método

+6

¿por qué está buscando otra solución? – MeBigFatGuy

+0

iam buscando alternativas (es la parte del aprendizaje) – developer

+0

Cuando coloca sincronizado en un método, es el objeto que no bloquea el método. –

Respuesta

6

podría utilizar el paquete de java.util.concurrent.locks, en especial interfaz de bloqueo:

Lock l = ...; 
l.lock(); 
try { 
    // access the resource protected by this lock 
} finally { 
    l.unlock(); 
} 

Ver here.

2

Depende de sus necesidades concretas.

Consulte Java concurrent package para abstracciones de sincronización de mayor nivel. Tenga en cuenta que aún pueden usar synchronized debajo ...

1

Eso depende de lo que esté tratando de hacer. ¿Estás mirando por curiosidad o hay una razón específica?

Si está tratando de acelerar sus métodos de subprocesos múltiples, intente sincronizar o bloquear secciones específicas, o evite por completo los problemas de subprocesamiento; hacen que los datos compartidos final, hacen que los datos estáticos (no compartidos) ThreadLocal, utilizan los tipos atómicos de java.util.concurrent.atomic, utilizar colecciones concurrentes (de los) java.util.concurrent paquetes, etc.

Por cierto, las cosas java.util.concurrent está disponible sólo en Java5 en adelante, aunque existe un proyecto para respaldar los paquetes para Java 1.4 en http://backport-jsr166.sourceforge.net/

Recomendaría el libro 'Java Concurrency in Practice', de Brian Goetz.

0

Puede usar un bloque sincronizado dentro de su método. Esto puede ser útil si desea que dos métodos pertenecientes a la misma clase se sincronicen por separado.

private Object guard = new ... 
public method(){ 
    synchronized(guard){ 
     \\method body 
     ... 
    } 
} 

Aunque en la mayoría de los casos esto sugiere que realmente debe romper su clase.

Cuestiones relacionadas