Comprensión de hilos (1)

Hilo

La relación entre CPU-proceso-hilo
Sabemos que el proceso es la unidad
de cómputo más pequeña de la CPU, y el hilo es la unidad de ejecución más pequeña de la CPU.
En este proceso, la ejecución a la derecha del hilo se puede entender como quién abre la CPU la válvula del flujo de información. .
El hilo es el camino del flujo de información marcado en la computadora, cuando la CPU abre la válvula a quien sea, se transmite el flujo de información marcado.
El propósito del hilo también es transportar el flujo de información. Mejorar la eficiencia de transmisión del flujo de información.
La esencia de los subprocesos: permite que el código se ejecute fuera de orden, se pueden ejecutar diferentes códigos por separado en el proceso de cálculo de la CPU, los subprocesos marcan el código que debe ejecutarse. Los subprocesos tienen sus propios números y diferentes números tienen diferentes funciones.

Hilo único

单线程 代码的执行顺序不变 多线程 代码的执行顺序取决于执行CPU的线程是哪个。

Multihilo

同一个进程中开启了多条执行的路径即线程,线程之间相互不影响,且同时执行。即多段代码同时执行。
将内存开辟为不同的区域,按区域的执行,代码在不同的内存区域中。
标记线程执行的进度,和线程的编号。

Ventajas del multihilo

1. Mejorar la eficiencia del programa
(1) En paralelo al mismo tiempo (2) Enviar datos de forma asincrónica (3) El código de back-end que consume mucho tiempo se puede implementar de forma asincrónica
2. El back-end utiliza
usos HTTP de fondo de múltiples subprocesos una forma síncrona por defecto, todo el proceso se basa en la respuesta, si el servidor no responde al cliente de manera oportuna, el cliente esperará todo el tiempo y la experiencia del usuario será mala.
3. Cada hilo no se afecta entre sí.

Procesamiento de conmutación de CPU multiproceso: CPU y núcleo

对于如果使用单核CPU服务器的时候,开启多线程的情况下,并不是真正意义上的多线程,因为单核CPU服务器同一个时刻只能执行一个线程,单核CPU的服务器的执行真正意义上是并发的执行,即不同线程的快速切换。
对于多核CPU的服务器在开启多线程的时候,有多少个核就能够执行多少个线程,实现并行的执行线程的任务。

Es multihilo cuanto más mejor

CPU的切换会影响服务器的性能。
如果项目小可以采用多线程实现异步,如果项目大建议通过mq实现异步。
如果是一个高并发项目建议采用MQ替代多进程。

Cómo crear múltiples hilos

1.继承Thread 重写run方法
2实现Runnable 接口 参数回调 装饰者设计模式
3.带返回结果的线程 Callable---Futuretask 底层开启一个线程 但执行顺序还是单线程的
4.线程池---四种实现方式
5.Spring异步直接使用	@Async注解 通过代理模式创建。
public class ThreadPool {
    
    
 public static void main(String[] args) {
    
    
  {
    
    
   ExecutorService exe = Executors.newCachedThreadPool();//多线程的创建方法
   System.out.println( Thread.currentThread().getName());
   exe.execute(()->System.out.println(Thread.currentThread().getName()));
  }
 }
}

Hilo de usuario e hilo de demonio

用户线程不会在主线程停止后停止。   t1.setDaemon(false);
守护线程会在主线程停止后停止。 t1.setDaemon(true);

Cómo detener un hilo con gracia

public class EndThread extends Thread{
    
    
  static boolean flag = true;
 public void run() {
    
    
  while(flag) {
    
    
 //线程的内容
  }
 }
 public static void main(String[] args) {
    
    
  EndThread endThread = new EndThread();
  endThread.start();
  flag=false;
 }
}

La diferencia entre esperar y dormir

wait------
sleep----
都是可以让当前线程阻塞。wait可以释放锁,
为什么wait可以放在object类中
	因为synchronizd可以使用任意对象为锁。

método de unión

哪个线程调用该方法 哪个线程阻塞
	调用join方法时 主线程会进入线程池进行休眠 其他的线程依旧在执行。也就是使用该方法的线程会优先执行。

Supongo que te gusta

Origin blog.csdn.net/qq_42351519/article/details/112124765
Recomendado
Clasificación