Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar la función Thread.Join de C#

Cómo utilizar la función Thread.Join de C#

Explicación de MSDN: bloquear el hilo de llamada hasta que finalice un hilo. Primero, debemos aclarar algunas cuestiones:

1. Un proceso consta de uno o más subprocesos y puede haber un cierto orden y una relación de exclusión mutua entre los subprocesos. En la programación de subprocesos múltiples, el primer paso es encontrar formas de dividir los subprocesos y reducir la secuencia y las relaciones de exclusión mutua entre subprocesos, para garantizar que la independencia de los subprocesos y su trabajo respectivo no se vea afectado. La idea central de MapReduce de Google es minimizar la secuencia y las relaciones de exclusión mutua entre subprocesos.

2. No importa cómo lo piense, habrá una cierta secuencia y relación de exclusión mutua entre subprocesos. En este caso, se puede utilizar Thread.

3. Durante el proceso de ejecución, un hilo puede llamar a otro hilo. El primero puede denominarse hilo llamante y el segundo se convierte en hilo llamado.

4. Escenarios de uso del método Thread.Join: el subproceso que realiza la llamada se cuelga, espera a que el subproceso llamado complete la ejecución y luego continúa la ejecución.

5. El hilo llamado ejecuta el método Join y le dice al hilo que llama que debe hacer una pausa primero y esperar a que complete la ejecución antes de ejecutarlo nuevamente. Esto asegura una relación secuencial.

6. Considere una situación interesante: llamar a Thread en el hilo actual. Análisis: suponga que el subproceso actual es A, el subproceso que llama es A y el subproceso llamado también es A. Dado que el subproceso que llama A está suspendido, el subproceso llamado A (es decir, el subproceso que llama A) nunca se ejecutará. resultando en un punto muerto.

Bien, después del análisis anterior, echemos un vistazo a los casos de prueba:

Use System

Use System.Collections.Generic

Usar System.Linq;

Usar System.Text;

Usar System.Text;

Usar System.Text;

Usar System.Text

Usar ?System.Threading;

espacio de nombres?Test

{

clase?TestThread

{

privado?static?void?ThreadFuncOne()

{

for(int?WriteLine(Thread.CurrentThread.Name?+? i ?=?" ?ha?terminado");

}

static?void?Main(string[]?args)

{

Subproceso.CurrentThread.Name?=?" ?MainThread";

Subproceso?newThread?=?new?Thread(new?ThreadStart(TestThread.ThreadFuncOne));

newThread.Name?=?"NewThread";

for(int?j?=?0;?j?

{

si?(j?==?10)

{

newThread.Start();

newThread.Join ();

}

else

{

Console.WriteLine(Thread.CurrentThread.Name?+?" j?=?" ? +?j ) ;

}

}

Console.Read();

}

}

}

Los siguientes son los resultados de la prueba:

Conclusión: De la prueba podemos ver claramente que MainThread se bloquea después de llamar a NewThread.Join y se bloquea hasta NewThread

Continuar hasta completar la ejecución.