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
Runnable
más fácil y API grupo de subprocesos con otros altos - Con
Runnable
dejar 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 detaskkill
Matar el proceso
Linux
ps -fe
Ver todos los procesosps -fT -p <PID>
Ver un proceso (PID) de todas las discusioneskill
Matar el procesotop
Mayúscula H toggle hilo pantallatop -H -p <PID>
Ver un proceso (PID) de todas las discusiones
Java
jps
Comando para ver todos los procesos Javajstack <PID>
Ver todos los hilos de un estado del proceso de Java (PID) dejconsole
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
run
se ejecuta en el hilo principalrun
, no iniciar nuevos temas - El uso
start
es para iniciar un nuevo hilo, un nuevo hilo a través de la ejecución indirectarun
código
2, el sueño 与 rendimiento
dormir
- Llamada de sueño hará que el hilo actual escurra hacia el estado de espera temporizado (bloqueo)
- Otros hilos puede utilizar el método de interrupción de interrupción hilo está durmiendo, entonces el método sueño lanza
InterruptedException
- Hilo después del final del sueño no puede ser implementado de inmediato
- TimeUnit sueño en lugar de la rosca de sueño recomendable que tenga una mejor legibilidad
rendimiento
- Call producirá el hilo actual desde Ejecutable Correr en el estado listo, entonces programar la ejecución de otros hilos
- 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