スレッドの理解(1)

CPU-プロセス-スレッド間の関係
プロセスは
CPUの最小の計算単位であり、スレッドはCPUの最小の実行単位である
ことがわかっています。このプロセスでは、スレッドの実行権は、CPUが情報フローのバルブを開く人として理解できます。 。
スレッドは、コンピューター内のマークされた情報フローのパスです。CPUがバルブを開くと、マークされた情報フローが伝達されます。
スレッドの目的は、情報フローを転送することでもあります。情報の流れの伝達効率を向上させます。
スレッドの本質—コードを順不同で実行できるようにする— CPU計算のプロセスで異なるコードを個別に実行できる—スレッドは実行する必要のあるコードをマークします。スレッドには独自の番号があり、番号が異なれば機能も異なります。

シングルスレッド

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

マルチスレッド

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

マルチスレッドの利点

1.プログラムの効率を改善します
(1)同時に並列(2)データを非同期に送信します(3)バックエンドの時間のかかるコードを非同期に実装できます
2.バックエンドはマルチスレッドのバックグラウンド
HTTPを使用しますデフォルトでは同期形式、全体プロセスは応答に基づいています。サーバーがクライアントにタイムリーに応答しない場合、クライアントは常に待機し、ユーザーエクスペリエンスが低下します。
3.各スレッドは相互に影響を与えません。

マルチスレッドCPUスイッチングプロセス-CPUとコア

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

マルチスレッドはより良いです

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

複数のスレッドを作成する方法

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()));
  }
 }
}

ユーザースレッドとデーモンスレッド

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

スレッドを正常に停止する方法

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;
 }
}

待機と睡眠の違い

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

結合メソッド

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

おすすめ

転載: blog.csdn.net/qq_42351519/article/details/112124765