java BASIC (thread)

directorio

1. Concepto

2. Pase la realización

4. Pase Estado

La concurrencia y sincronización

6. comunicación



En primer lugar, el concepto

1, proceso: a proceso corresponde a un programa. Un proceso puede tener varios subprocesos.

2. Tema: es una ruta de ejecución independiente. Es un flujo de ejecución del programa. CPU como el cuerpo principal. java en el hilo es una CPU virtual, el código y los datos. Código y los datos son independientes entre sí. código Comportamiento y el cuerpo de datos constituye un hilo, el hilo está determinada por el cuerpo hilo. Cuando se crea un hilo CPU virtual se encapsula automáticamente en la instancia de la clase Thread.

3, el programa se está ejecutando, incluso si él no creó un hilo, el fondo tendrá varios subprocesos.

4, main () del hilo principal. Una entrada para el programa.

5, hilo de programación por el planificador, el orden no se considera la intervención.

6, la prioridad del hilo: el establecimiento de prioridades. El nivel debe estar entre 1 y 10. Y el orden de prioridad de ejecución no representa

7, hilos daemon (demonio): JVM no tienen que esperar la ejecución del hilo daemon, setDaemon (true) convierte a un daemon

8, Punto muerto: múltiples hilos ocupan algunos recursos compartidos, mutua no depurados. A la espera de uno al otro. Causar un callejón sin salida.

9, la programación de subprocesos: una pluralidad de hilos se ejecutan en un orden determinado en una sola CPU.

En segundo lugar, tres métodos para crear un hilo

  1. interfaces de rosca heredado, funcionamiento de anulación método ()

Los pasos básicos: la herencia de interfaces, reemplazar el método de ejecución, para crear un objeto hilo, usando el start () hilo abierta.

nota:

  • subproceso de ejecución debe llamar al método start () sólo se puede añadir al planificador.
  • Únete al planificador no puede ser ejecutada inmediatamente, a la espera de la ejecución del planificador de asignación
  • Si la llamada directa al método run (). No abra los múltiples hilos. Se llama al método ordinario.
    Ejemplos: 1 se añadió usando un hilo de ejecución del programa 100
public class text extends Thread{//继承Thread
    @Override
    public void run() {    //重写run()方法
        super.run();
        int num = 1;
        
        for(int i = 2; i <= 100; i++) {
            num += i;
        }
        System.out.println("1+2+3+.....+100="+num);
    }
    public static void main(String[] args){
        text tt = new text();//创建线程对象
        tt.start();    //开启线程
    }}

  1. Lograr Ejecutable
    necesidad de crear un objeto hilo, el objeto de destino y, a continuación, iniciar el hilo.
    Ventajas: se deben evitar las limitaciones de la herencia simple. Uso de la interfaz. compartir de forma sencilla.
    Ejemplos: 1 a 100 se calcula utilizando Ejecutable
public class text implements Runnable{//实现Runnable
    @Override
    public void run() {    //重写run()方法
        int num = 1;
        for(int i = 2; i <= 100; i++) {
            num += i;
        }
        System.out.println("1+2+3+.....+100="+num);
    }
    public static void main(String[] args){ 
        text tt = new text();//创建目标对象
        Thread th = new Thread(tt);//创建线程对象。
        th.start();//开启线程
        //如果是使用一次。可以使用匿名写法。
        //new Thread(tt).start();
    }
}

  1. Callable lograr 
    los pasos necesarios: Crear un objeto de destino, la creación de servicios de implementación, presentadas al Ejecutivo, obtener resultados, cerrar el servicio
    en general, ir al trabajo después de un período de tiempo, se puede utilizar para.
public class text implements Callable{//实现Callable
    @Override
    public Object call() throws Exception {//重写call()
        int num = 1;
        for(int i = 2; i <= 100; i++) {
            num += i;
        }
        System.out.println("1+2+3+.....+100="+num);
        return true;
    }
    
    public static void main(String[] args) throws 
    InterruptedException, ExecutionException{
        //(1)创建目标对象
        text tt = new text();
        //(2)创建执行服务
        ExecutorService es = Executors.newFixedThreadPool(1);
        //(3)执行服务
        Future<Boolean> submit = es.submit(tt);
        //(4)获取结果
        boolean object = submit.get();
        //(5)关闭服务
        es.shutdownNow();   
    }
}

Volver arriba

En cuarto lugar, el estado del hilo

Aquí Insertar imagen Descripción(1) resulta en un estado de hilo método de transición listo:
     inicio de la llamada (), desbloqueo, rendimiento llamando al (), el hilo de conmutación de JVM en sí.
(2) método da como resultado el bloqueo de las transiciones de estado:
     el sueño de llamada (), wait (), join (), IO en el read (), write ()

Varios métodos:
CurrentThread: Devuelve el flujo actual.
isAlive: determinar si el subproceso actual vivo.
suspenda: suspender hilo. Si desea restaurar este hilo, otros hilos deben llamar a la hoja de vida reanuda el hilo actual.

(3) un método de transición de estado de un hilo

  1. Tema a tope (usar el booleano)
    JDK proporcionada por el tope (), destroy () se ha abandonado el JDK. Así que esto
    se puede establecer un valor booleano. Encenderse y roscas de parada.

  2. Hilo de suspender (sueño)
    puede usar de sueño (tiempo), establecer el tiempo de sueño, para hacer una pausa un efecto hilo.
    El tiempo es el número de milisegundos. Por otra parte, el sueño no va a liberar el bloqueo.

  3. Tema cortesía (rendimiento)
    hilo cortesía es el hilo actual suspendido. En lugar de bloquear el hilo actual al estado de listo se ejecute. Deje reprogramación de la CPU.

  4. Tema Salto de la cola (Unir)
    para saltar la cola, el hilo está bloqueado actualmente en ejecución. Esperando para saltar la cola de ejecución del hilo ha terminado. En otros hilos de ejecución. Es un estado de bloqueo.

  5. interrupción
    Si un hilo se encuentra en la célula bloqueado utilizando el método de interrupción permitirá que el hilo de interrupción de estado está desactivada. Y el hilo recibirá InterruptExcaption excepción.

Volver arriba

En quinto lugar, la concurrencia y sincronización

  1. Concurrencia: simultánea funcionamiento es el mismo objeto varios subprocesos.
  2. Sync: es un mecanismo de espera. Múltiples hilos necesitan tener acceso al mismo objeto en la cola de espera la formación de piscinas. Después de la necesidad de esperar en frente del hilo utilizado, el siguiente hilo y luego usar este recurso.
  3. regiones críticas: un segmento de código de programa en hilos separados, concurrentes para acceder al mismo objeto, y puede ser de bloque.
  4. Objeto de bloqueo: cada objeto designado por una cerradura dispuesta para sincronizar comunicado. Es un bloqueo exclusivo único. Si un hilo para adquirir el objeto de bloqueo, la operación tendrá el derecho de objeto, otros hilos no pueden llevar a cabo cualquier operación sobre el objeto.

Hilo de seguridad: la necesidad de formar una cola, y un mecanismo de bloqueo.

  1. Después de obtener el objeto bloqueo exclusivo, recursos exclusivos, otros hilos deben esperar
  2. Multithreading competencia, de bloqueo, lo que resulta en la liberación de la cerradura más contexto de conmutación y retardo de programación. causa problemas de rendimiento
  3. Si un subproceso de prioridad alta que esperar a que un hilo de menor prioridad, prioridad conducirá, causando problemas de rendimiento

Mecanismo de bloqueo, el bloque de sincronización

  1. Cada objeto corresponde a una cerradura, un sincronizan cada método debe llamar al método de obtención de la cerradura objeto puede realizar. De lo contrario, el hilo se bloquea. Método, si se aplica, será el bloqueo exclusivo. Hasta que devuelve el método, se bloqueará la liberación. hilo bloqueado puede adquirir el bloqueo de volver a entrar en el estado ejecutable.
  2. Sincronizar bloque de sincronización: Sincronizar (obj) {}, obj llamado monitor de sincronización de
    cualquier objeto puede ser utilizado como monitor de sincronización.
    El método de sincronización sin especificar monitor de sincronización, porque el método de sincronización del monitor de sincronización es el objeto mismo.
    CopyOnWriteArrayList contenedor <tipo> se han integrado en el mecanismo de bloqueo.

Volver arriba

Seis, la comunicación

Aquí Insertar imagen Descripción
 En la figura. Cuando hay un almacén de mercancías, los consumidores necesitan estar informados. Entonces, cuando no hay bienes, informan al productor
de la transferencia de un tal (comunicación) del mensaje

Debido a que los bloques de sincronización de sincronización, evita actualizaciones simultáneas a los mismos recursos compartidos para lograr la sincronización. Sin embargo, no se puede lograr problemas de comunicación entre los diferentes hilos.

Resolver un problema de comunicación:

  1. ¿Qué método sólo se puede utilizar en el método de sincronización o código síncrono. Puede resolver problemas de comunicación.
    wait (): hilo espere hasta que las notificaciones de rosca. Y dormir () diferente. Será liberar el bloqueo.
    notifiy (): despertar un hilo en un estado de espera
    ontifyAll (): llamada de atención a todos los métodos de la espera hilo () en el mismo objeto. prioridad de planificación de alta prioridad

  2. Tube-
    concurrente modelo de colaboración "modelo productor / consumidor" es el tubo.
    Configurar una zona de separación entre productores y consumidores. Hay un contenedor de datos, los consumidores pueden consumir,
    de datos está vacío, esperando a que los consumidores, los productores pueden ser producidos. Datos está lleno, productor de espera

  3. Sé configuración de booleanos. Al igual que las luces como     
    es el uso del valor booleano, poniendo el interruptor Nota: No se olvide que después de esperar, necesidad de volver interruptor.

  4. horario regular
    mediante el temporizador, TimeTask lograr la sincronización para iniciar un hilo.

Volver arriba

Publicado 12 artículos originales · ganado elogios 0 · Vistas 110

Supongo que te gusta

Origin blog.csdn.net/weixin_44304524/article/details/104862777
Recomendado
Clasificación