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:
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 no se establece el nombre del hilo, 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:
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();
}
}
Los resultados de ejecutar el código anterior son los siguientes:
Nota: Cualquier programa Java debe tener un hilo principal. Generalmente, el nombre de este hilo principal es principal. Solo creando otros hilos en el programa se puede considerar como un verdadero programa multiproceso. En otras palabras, un programa multiproceso debe tener más de un subproceso.
La clase Thread tiene un constructor sobrecargado que puede establecer el nombre del hilo. Además de utilizar el método constructor para establecer el nombre del hilo al crear un hilo, también puede utilizar 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 de Thread. Por lo tanto, también debe agregar un hilo para pasar en la subclase de Thread. Nombre constructor. El siguiente código ofrece un ejemplo de cómo configurar el nombre del hilo:
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();
}
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.
Se establecen tres subprocesos en el método principal: subproceso1, subproceso2 y subproceso3. Entre ellos, el subproceso1 establece el nombre del subproceso mediante el método de construcción, el subproceso2 modifica el nombre del subproceso mediante el método setName y el subproceso3 no establece el nombre del subproceso.
Los resultados de ejecución son los siguientes:
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, habrá un fenómeno en el que, aunque se llame al método setName, el nombre del hilo no se modifique.
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.