¿Cómo crear un hilo es seguro? Leer el artículo con preguntas

Primero mira un problema:

¿El siguiente método es seguro para subprocesos? ¿Cómo puede este método ser seguro para subprocesos?

public class MyCount {
  private static int counter = 0;

  public static int getCount(){
    return counter++;
  }
}

En primer lugar, este método no es seguro para subprocesos, porque la operación counter ++ no es una operación atómica, lo que significa que la operación counter ++ contiene varias operaciones atómicas. De hecho, counter ++ contiene tres operaciones atómicas: el primer paso es obtener el valor de counter, el segundo paso es sumar 1 al valor de counter y el tercer paso es escribir. En un entorno multiproceso, pueden ocurrir los siguientes escenarios al llamar al método getCount (): Inserte la descripción de la imagen aquíMétodo 1: Agregar control de sincronización a este método hará que este método sea seguro para subprocesos. Al agregar la modificación de la palabra clave sincronizada a un método estático, en realidad es el objeto Class correspondiente a esta clase el que está bloqueado. En la JVM, solo existe un objeto Class para una clase.

El ejemplo de código es el siguiente:

public class MyCount {
private static int counter = 0;

public static synchronized int getCount(){
return counter++;
}
}

Si el método no es estático, cuando la palabra clave sincronizada se agrega al método, el objeto de instancia correspondiente está realmente bloqueado, no el objeto Class correspondiente a esta clase.

Método 2: En este ejemplo de contador especial, de hecho, siempre que la operación de contador ++ se convierta en una operación atómica, este método se puede convertir en seguro para subprocesos. En la biblioteca de subprocesos de jdk5, la clase AtomicInteger proporcionada en el paquete java.util.concurrent.atomic puede satisfacer nuestras necesidades.

El ejemplo de código es el siguiente:

public class MyCount {
private static AtomicInteger counter = new AtomicInteger(0);

public static int getCount(){
return counter.getAndIncrement();
}
}

Al final

Los estudiantes que quieran aprender java pueden responder a la información mediante un mensaje privado para recibir un resumen de las preguntas de la entrevista de Java de los fabricantes de primera línea + manual de Alibaba Taishan + guía de aprendizaje y pensamiento para cada punto de conocimiento + un resumen de los puntos de conocimiento básicos de Java en un documento pdf de 300 páginas.

El contenido de estos materiales son todos los puntos de conocimiento que el entrevistador debe preguntar durante la entrevista. El capítulo incluye muchos puntos de conocimiento, incluidos conocimientos básicos, colecciones de Java, JVM, concurrencia multiproceso, principios de primavera, microservicios, Netty y RPC, Kafka , Diario, patrón de diseño, algoritmo Java, base de datos, Zookeeper, caché distribuida, estructura de datos, etc. expediente

Supongo que te gusta

Origin blog.csdn.net/weixin_46577306/article/details/108208125
Recomendado
Clasificación