Hay dos formas de crear subprocesos en Java: usando la clase Thread y usando la interfaz Runnable. Cuando utilice la interfaz Runnable, debe crear una instancia de Thread. Por lo tanto, ya sea que cree un hilo a través de la clase Thread o la interfaz Runnable, debe crear una instancia de la clase Thread o su subclase. El constructor de la clase Thread se ha sobrecargado ocho veces. El constructor es el siguiente:
Copie el código de código de la siguiente manera:
Hilo público ();
Hilo público (objetivo ejecutable);
Hilo público (nombre de cadena);
Hilo público (objetivo ejecutable, nombre de cadena);
hilo público (grupo ThreadGroup, objetivo ejecutable);
Hilo público (grupo ThreadGroup, nombre de cadena);
hilo público (grupo ThreadGroup, destino ejecutable, nombre de cadena);
hilo público (grupo de grupo de hilos, destino ejecutable, nombre de cadena, tamaño de pila largo);
Objetivo ejecutable
Una instancia de una clase que implementa la interfaz Runnable. Cabe señalar que la clase Thread también implementa la interfaz Runnable, por lo tanto, las instancias de clases heredadas de la clase Thread también se pueden pasar a este constructor como objetivos.
Nombre de cadena
El nombre del hilo. Este nombre se puede establecer mediante el método setName de la clase Thread después de crear una instancia de Thread. Si el nombre del hilo no está configurado, el hilo usa el nombre del hilo predeterminado: Thread-N es el orden en que se crea el hilo y es un entero positivo que no se repite.
Grupo ThreadGroup
El grupo de subprocesos al que pertenece el subproceso creado actualmente. Si no se especifica ningún grupo de subprocesos, todos los subprocesos se agregan a un grupo de subprocesos predeterminado. Los detalles sobre los grupos de hilos se discutirán en detalle en capítulos posteriores.
pila largaTamaño
El tamaño de la pila de subprocesos. Este valor es generalmente un múltiplo entero de la página de la CPU. Por ejemplo, el tamaño de página de x86 es 4 KB. En la plataforma x86, el tamaño de pila de subprocesos predeterminado es 12 KB.
Una clase Java ordinaria puede convertirse en una clase de subproceso siempre que herede de la clase Thread. Y el código del hilo se puede ejecutar a través del método de inicio de la clase Thread. Aunque se pueden crear instancias de las subclases de la clase Thread directamente, el método de ejecución de la clase Thread debe anularse en la subclase para ejecutar realmente el código del hilo. El siguiente código ofrece un ejemplo del uso de la clase Thread para crear un hilo:
Copie el código de código de la siguiente manera:
paquete de mitos;
la clase pública Thread1 extiende Thread
{
ejecución pública vacía()
{
System.out.println(this.getName());
}
principal vacío estático público (String [] argumentos)
{
System.out.println(Thread.currentThread().getName());
Hilo1 hilo1 = nuevo Hilo1();
Hilo1 hilo2 = nuevo Hilo1 ();
hilo1.start();
hilo2.start();
}
}
El código anterior crea dos subprocesos: subproceso1 y subproceso2. Las líneas 005 a 005 en el código anterior son el método de ejecución de la clase Thread1. Cuando se llama al método de inicio en las líneas 014 y 015, el sistema llama automáticamente al método de ejecución. En la línea 007, this.getName() se usa para generar el nombre del hilo actual. Dado que el nombre del hilo no se especifica cuando se crea el hilo, la salida del nombre del hilo es el valor predeterminado del sistema, que tiene el formato Thread. -norte. El nombre del hilo principal se muestra en la línea 011.
Los resultados de ejecutar el código anterior son los siguientes:
principal
Hilo-0
Hilo-1
Como se puede ver en el resultado anterior, el resultado principal en la primera línea es el nombre del hilo principal. Los siguientes Thread-1 y Thread-2 son los resultados de salida de thread1 y thread2 respectivamente.
Nota: Cualquier programa Java debe tener un hilo principal. Generalmente, el nombre de este hilo principal es main. Solo creando subprocesos adicionales en el programa se puede considerar un verdadero programa multiproceso. En otras palabras, un programa multiproceso debe tener más de un subproceso.
La clase Thread tiene un constructor sobrecargado para establecer el nombre del hilo. Además de usar el método constructor para establecer el nombre del hilo al crear un hilo, también puede usar el método setName de la clase Thread para modificar el nombre del hilo. Para establecer el nombre del hilo a través del constructor de la clase Thread, debe usar el constructor público Thread (nombre de cadena) de la clase Thread en la subclase Thread. Por lo tanto, también debe agregar un hilo para pasar en el constructor Thread Name. . El siguiente código ofrece un ejemplo de cómo configurar el nombre del hilo:
Copie el código de código de la siguiente manera:
paquete de mitos;
la clase pública Thread2 extiende Thread
{
cadena privada quién;
ejecución pública vacía()
{
System.out.println(quién + ":" + this.getName());
}
hilo público2 (cadena quién)
{
súper();
this.who = quién;
}
hilo público2 (cadena quién, nombre de cadena)
{
super(nombre);
this.who = quién;
}
principal vacío estático público (String [] argumentos)
{
Thread2 thread1 = nuevo Thread2 ("thread1", "MyThread1");
Hilo2 hilo2 = nuevo Hilo2 ("hilo2");
Hilo2 hilo3 = nuevo Hilo2 ("hilo3");
thread2.setName("MiHilo2");
hilo1.start();
hilo2.start();
hilo3.start();
}
Hay dos constructores en la clase:
Línea 011: muestra pública2_2 (cadena quién)
Este constructor tiene un parámetro: quién. Este parámetro se utiliza para identificar el hilo creado actualmente. El constructor predeterminado de Thread, public Thread(), todavía se llama en este constructor.
Línea 016: muestra pública2_2 (cadena quién, nombre de cadena)
Who en este constructor tiene el mismo significado que who en el primer constructor, y el parámetro de nombre es el nombre del hilo. En este constructor, se llama al constructor público Thread (nombre de cadena) de la clase Thread, que es super (nombre) en la línea 018.
En el método principal se establecen tres subprocesos: subproceso1, subproceso2 y subproceso3. Entre ellos, thread1 establece el nombre del hilo mediante el método de construcción, thread2 modifica el nombre del hilo mediante el método setName y thread3 no establece el nombre del hilo.
Los resultados de ejecución son los siguientes:
Copie el código de código de la siguiente manera:
hilo1:MiHilo1
hilo2:MiHilo2
hilo3: hilo-1
Como se puede ver en el resultado anterior, los nombres de los subprocesos de subproceso1 y subproceso2 se han modificado, mientras que el nombre del subproceso de subproceso3 sigue siendo el valor predeterminado: Subproceso-1. La razón por la que el nombre del subproceso3 no es Subproceso-2 sino Subproceso-1 es porque el nombre del subproceso2 se ha especificado en la línea 026. Por lo tanto, cuando se inicia el subproceso3, el nombre del subproceso3 se establece en Subproceso-1. Entonces obtendrá el resultado anterior.
Nota: Puede usar setName para establecer el nombre del hilo antes y después de llamar al método de inicio. Sin embargo, usar setName para modificar el nombre del hilo después de llamar al método de inicio causará incertidumbre, lo que significa que es posible que setName no se ejecute hasta que se ejecute el método. ejecutado. Si desea utilizar el nombre del hilo en el método de ejecución, se producirá el fenómeno de que, aunque se llama al método setName, el nombre del hilo no se modifica.
El método de inicio de la clase Thread no se puede llamar varias veces. Por ejemplo, el método thread1.start() no se puede llamar dos veces. De lo contrario, se generará una IllegalThreadStateException.