Implemente subprocesos múltiples heredando la clase Thead:
Ventajas: Fácil de escribir Si necesita acceder al hilo actual, simplemente use esto en lugar de usar el método Thead.currentThread().
Desventaja: debido a que esta clase de hilo ha heredado la clase Thead, no puede heredar otras clases.
Código de muestra:
Copie el código de código de la siguiente manera:
paquete org.frzh.thread;
la clase pública FirstThread extiende Thread{
privado ent i;
// Reescribe el método de ejecución. El cuerpo del método de ejecución es el cuerpo de ejecución del hilo.
ejecución pública vacía() {
para (; yo < 100; yo ++) {
// Cuando la clase de subproceso hereda la clase de subproceso, puede llamar directamente al método getName para obtener el nombre del subproceso actual.
//Si quieres obtener el hilo actual, úsalo directamente
//El método getName del objeto Thread devuelve el nombre del hilo actual
System.out.println(getName() + " " + i);
}
}
público estático vacío principal (String [] argumentos) {
para (int i = 0; i < 100; i++) {
//Llama al método currentThread de Thead para obtener el hilo actual
System.out.println(Thread.currentThread().getName() + " " +i);
si (yo == 20) {
nuevo PrimerSubproceso().start();
nuevo PrimerSubproceso().start();
}
}
}
}
Fragmento del resultado de la ejecución:
Descubrimos que los valores de i en los dos subprocesos no son continuos, lo que parece inconsistente con lo que dijimos sobre el intercambio directo de datos entre los subprocesos. De hecho, aquí creamos instancias de dos subprocesos, cada uno con su propia variable de instancia i.
Usando subprocesos múltiples que implementan la interfaz Runable:
Ventajas: la clase de hilo solo implementa la interfaz Runable, por lo que también puede heredar otras clases;
En este caso, varios subprocesos pueden compartir un objeto de destino, por lo que es muy adecuado que varios subprocesos procesen el mismo recurso, de modo que la CPU, el código y los datos se puedan separar para formar un modelo claro y una mejor reflexión orientada a objetos. .
Desventajas: la programación es un poco complicada. Si desea acceder al hilo actual, debe utilizar el método Thread.currentThread.
Código de muestra:
Copie el código de código de la siguiente manera:
paquete org.frzh.thread;
La clase pública SecondThread implementa Runnable{
privado ent i;
@Anular
ejecución pública vacía() {
// TODO Código auxiliar de método generado automáticamente
para (; yo < 100; yo ++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
público estático vacío principal (String [] argumentos) {
para (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
si (yo == 20) {
SegundoHilo st = nuevo SegundoHilo();
new Thread(st, "hilo secundario 1").start();
new Thread(st, "hilo secundario 2").start();
}
}
}
}
Fragmento del resultado de la ejecución:
Se puede ver que el valor de i en este momento cambia continuamente porque los subprocesos 1 y 2 comparten el mismo objetivo.