Registros de autoaprendizaje de Java4Android (24-1): creación de subprocesos basada en Java

El camino tiene obstáculos y es largo, y la línea se acerca. Mantén la cabeza baja y trabaja duro, si no hablas, ¡serás un éxito de taquilla! ¡Vamos, Sao Nian!

Directorio e índice de recursos

  Índice de recursos y catálogo de procesos de autoaprendizaje Java4Android

1 multiproceso y multiproceso

  En pocas palabras, multiproceso: se pueden ejecutar varias tareas (programas) (simultáneamente) en el sistema operativo; multiproceso: ejecución de múltiples flujos secuenciales (simultáneos) en la misma aplicación.

  Cada vez que inicia una aplicación, inicia un proceso. Para Android, en principio, solo hay un proceso para un software.

Proceso de ejecución de 2 hilos

  Consulte el material del curso del maestro, hay los siguientes ejemplos, similar a una bomba, dos tuberías de agua están bombeando al mismo tiempo;

2.1 Diagrama de flujo de ejecución de subprocesos

  Un breve resumen de todo el proceso de ejecución de un hilo es: crear un nuevo hilo -> iniciar hilo -> hilo en ejecución (programación controlada) -> ejecutar terminado -> liberación / reciclaje del hilo;

  Consulte la imagen del maestro, resumida de la siguiente manera:

  Para la figura anterior, comprenda el proceso de ejecución de subprocesos nuevamente: primero cree un subproceso, luego comience a ejecutar, luego ingrese al estado listo, luego ingrese al estado de ejecución, y luego espere la programación de la CPU, ingrese el bloque, luego desbloquee, luego ejecute, y así sucesivamente, hasta que se complete la ejecución, Destruye el hilo.

3 métodos para crear hilos

3.1 Método 1: Heredar la clase Thread

  Defina una clase de hilo, herede la clase Thread y reescriba el método run () en ella. El método run () se llama cuerpo del hilo;

  Nota: Dado que Java solo admite herencia única, las clases definidas de esta manera ya no pueden heredar otras clases.

  El método de implementación específico, consulte el código a continuación

class FirstThread extends Thread
{
    
    
	public void run()
	{
    
    
		for(int i = 0; i < 100; i++)
		{
    
    
			System.out.println("FirstThread-->" + i);
		}
	}
}

  Cree una nueva clase de función principal, el código específico es el siguiente:

class Test
{
    
    
	public static void main(String args[])
	{
    
    
		// 生成线程类的对象
		FirstThread ft = new FirstThread();
		
		// 启动线程
		ft.start();
	}
}

  El código anterior es consistente con nuestro pensamiento inicial. El contenido de la función principal también es muy simple. Nuevo un objeto, luego inicie el hilo y listo.

  Entonces, ¿cuál es el proceso de ejecución del código anterior?

  Lo anterior es solo una parte de la captura de pantalla. Debido al ciclo for, seguirá todos los pasos.

  Entonces, la pregunta es, ¿adivina cuántos subprocesos se están ejecutando en este momento? Sí, la respuesta es dos, porque la función principal en sí misma también es un hilo, lo llamamos hilo principal. Entonces, ¿cómo verificar nuestra conclusión? Simplemente agregue algo de impresión en la función principal, de la siguiente manera:

class Test
{
    
    
	public static void main(String args[])
	{
    
    
		// 生成线程类的对象
		FirstThread ft = new FirstThread();
		
		// 启动线程
		ft.start();
		
		for(int i = 0; i < 100; i++)
		{
    
    
			System.out.println("main-->" + i);
		}
	}
}

  Después de compilar el programa, el resultado de ejecución es el siguiente, encontrará que los dos subprocesos se ejecutan alternativamente

  En este punto, el problema vuelve a ser: ¿No solemos decir que los subprocesos pueden ejecutarse al mismo tiempo? Tenga en cuenta que la "sincronización" mencionada en este momento es de un nivel macro. Por ejemplo, se tarda 1 ms en ejecutar A o B una vez. Si dentro de 1 hora, AB se ejecuta alternativamente, es decir, A se ejecuta 30 veces durante este período. Minutos, B también se ejecuta durante 30 minutos. Si hace zoom en la escala y mira desde la distancia, puede decir que AB está corriendo al mismo tiempo; sin embargo, si acerca la escala, desde una mirada más cercana, es cierto que AB no se está ejecutando sincrónicamente, es decir, micro-visualización. Al llegar A, se ejecutará primero durante 1 ms, luego B se ejecutará durante 1 ms y se ejecutará alternativamente.

  Nota: Si no usa ft.start () y usa ft.run () directamente, el programa se ejecuta en un hilo, no multiproceso.

3.2 Método 2: Implementar interfaz Ejecutable

  Proporcione una clase que implemente la interfaz Runnable como el objeto de destino del hilo. Al inicializar un objeto de hilo de la clase Thread o subclase de Thread, el objeto de destino se pasa a la instancia del hilo y el objeto de destino proporciona el cuerpo del hilo.

  Tenga en cuenta que en este momento hemos heredado una interfaz , como sigue:

class RunnableImpl implements Runnable
{
    
    
	public void run()
	{
    
    
		for(int i = 0; i < 100; i++)
		{
    
    
			System.out.println("Runnable-->" + i);
		}
	}
}

   El código de función principal es el siguiente:

class Test
{
    
    
	public static void main(String args[])
	{
    
    
		// 生成一个 Runnable 接口实现类的对象
		RunnableImpl ri = new RunnableImpl();
		
		// 生成一个Thread对象,并将Runnable接口实现类的对象作为
		// 参数传递给该Thread对象(参数为Runnable类型的)
		Thread t = new Thread(ri);
		
		// 通知Thread对象,执行start方法
		t.start();
	}
}

  El código anterior, después de la compilación, los resultados son los siguientes:

3.3 Resumen de dos métodos

  El primero es heredar la clase Thread, el segundo es implementar la interfaz Runnable;

  En el uso real, no es necesario utilizar la herencia, porque java solo puede admitir una herencia única, por lo que es mejor implementar interfaces.

4 resumen

  1. Comprenda brevemente los dos métodos para crear subprocesos en Java, y sus ventajas y desventajas;
  2. Realmente use el código básico para la práctica, pero no es lo suficientemente profundo;
  3. El seguimiento debe tener un conocimiento profundo y sentar una base sólida;

Si el contenido del artículo es incorrecto, comente / envíe un mensaje privado con muchos consejos, ¡gracias! Si crees que el contenido del artículo no es malo, deja un me gusta, tu me gusta es mi mayor aliento, ¡gracias!

Supongo que te gusta

Origin blog.csdn.net/Fighting_Boom/article/details/106583499
Recomendado
Clasificación