java de programación concurrente Dos Notas

las hebras Java

Un método, hilo directamente

// 创建线程对象
Thread t = new Thread() {
 public void run() {
 	// 要执行的任务
	 }
};
// 启动线程
t.start();

El segundo método utilizado con hilo Ejecutable

El [thread] y [tarea] (código para ser ejecutados) por separado

  • hilo de rosca representantes
  • Tareas (hilos de tareas a ejecutar) ejecutable Ejecutable
Runnable runnable = new Runnable() {
 public void run(){
 	// 要执行的任务
 }
};
// 创建线程对象
Thread t = new Thread( runnable );
// 启动线程
t.start(); 

Hilo de la relación entre el principio y el Ejecutable

  • Método 1 es el hilo y la tarea se fusionaron, Método 2 es separar los hilos y tareas
  • Con Runnablemás fácil y API grupo de subprocesos con otros altos
  • Con Runnabledejar salir de los hereda de la clase Thread el sistema de tareas, más flexible

Así que trate de usoRunnable

Método tres, FutureTask con hilo

En que puedan recibirse tipos FutureTask exigible de parámetros, el procesamiento tiene que devuelven resultados

// 创建任务对象
FutureTask<Integer> task3 = new FutureTask<>(() -> {
 log.debug("hello");
 return 100;
});
// 参数1 是任务对象; 参数2 是线程名字,推荐
new Thread(task3, "t3").start();
// 主线程阻塞,同步等待 task 执行完毕的结果
Integer result = task3.get();
log.debug("结果是:{}", result);

Observar varios subprocesos para ejecutar simultáneamente

  • realizado alternativamente
  • Al revés, no estamos controlamos

Ver método de hilo proceso

ventanas

  • Administrador de tareas puede comprobar los procesos y subprocesos, sino que también puede ser usado para matar el proceso
  • tasklist Ver el proceso de
  • taskkill Matar el proceso

Linux

  • ps -fe Ver todos los procesos
  • ps -fT -p <PID> Ver un proceso (PID) de todas las discusiones
  • kill Matar el proceso
  • top Mayúscula H toggle hilo pantalla
  • top -H -p <PID> Ver un proceso (PID) de todas las discusiones

Java

  • jps Comando para ver todos los procesos Java
  • jstack <PID> Ver todos los hilos de un estado del proceso de Java (PID) de
  • jconsole Para ver una hilos de Java en el proceso de la operación (GUI)

jconsole para la configuración de monitorización remota
ligeramente

Enhebrar principio de funcionamiento

Stack y marcos de pila

Pilas Máquina Virtual Java (Java Virtual Machine pila)
Todos sabemos que para el almacenamiento dinámico de JVM, pila, la zona método, donde la memoria de pila es a la que se usa? De hecho, las discusiones, cada hilo después del inicio, la máquina virtual se les asignará una memoria de pila.

  • Cada pila es una pila de una pluralidad de marcos de composición (Frame), correspondiente a cada memoria de invocación de método ocupada
  • Cada hilo sólo puede tener un marco de pila activa, correspondiente al método que está siendo ejecutado

el cambio de contexto rosca (rosca cambio de contexto)

Debido a que algunos de los siguientes CPU ya no hace que la ejecución del hilo actual en favor de otra ejecución de código hilo

  • Roscan CPU porción de tiempo se agota
  • La recolección de basura
  • Un hilo de mayor prioridad para ejecutar
  • hilo propia llama del sueño, rendimiento, espera, unir, parque, sincronizada, bloqueo y otros métodos

Cuando se produce el cambio de contexto, el estado de las necesidades de rosca actuales para ser salvado por el sistema operativo, y restaurar el estado de otro hilo, Java concepto correspondiente es el contador de programa (Programa Contador Registro), su papel es el de ejecutar una instrucción bajo JVM recordar dirección, es el hilo privada

  • Estado incluye un contador de programa, la información de la pila de marcos de cada máquina virtual pila, como las variables locales, una pila de operandos, la dirección del remitente
  • Cambio de contexto se produce con frecuencia afecta al rendimiento

1, iniciar 与 plazo
  • llamada directa runse ejecuta en el hilo principal run, no iniciar nuevos temas
  • El uso startes para iniciar un nuevo hilo, un nuevo hilo a través de la ejecución indirecta runcódigo
2, el sueño 与 rendimiento

dormir

  1. Llamada de sueño hará que el hilo actual escurra hacia el estado de espera temporizado (bloqueo)
  2. Otros hilos puede utilizar el método de interrupción de interrupción hilo está durmiendo, entonces el método sueño lanza InterruptedException
  3. Hilo después del final del sueño no puede ser implementado de inmediato
  4. TimeUnit sueño en lugar de la rosca de sueño recomendable que tenga una mejor legibilidad

rendimiento

  1. Call producirá el hilo actual desde Ejecutable Correr en el estado listo, entonces programar la ejecución de otros hilos
  2. implementaciones específicas se basan en el programador de tareas del sistema operativo

prioridad de los hilos

  • Prioridad de los hilos se le pedirá que (pista) planificador de prioridad de programación de la rosca, pero es sólo un recordatorio, planificador puede ignorarlo
  • Si la CPU ocupada, así subproceso de prioridad alta se pondrá más intervalo de tiempo, pero el ocio de la CPU, la prioridad casi ningún efecto
3, se unen a los métodos detallados
4, los métodos detallados de interrupción
Publicado 93 artículos originales · ganado elogios 31 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43866567/article/details/104543464
Recomendado
Clasificación