糸
プロセスは
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方法时 主线程会进入线程池进行休眠 其他的线程依旧在执行。也就是使用该方法的线程会优先执行。