JUC——01
2763 ワード
目次 1.1 JUCとは何ですか. 1.1.1プロセスとスレッド 1.1.2 wait/sleepの違い 1.1.3並列 2.1スレッドの作成方法 2.1.1コード実装 2.2.2同期 について
JUCのフルネームはjavaです.util.concurrent.は、同時プログラミングで使用されるツールクラスです.
≪プロセス|Process|emdw≫:プロセスは、データ・セットに関する一定の独立した機能を持つプログラムの実行アクティビティです.これはオペレーティングシステムが動的に実行する基本ユニットであり、従来のオペレーティングシステムでは、プロセスは基本的な割り当てユニットであり、基本的な実行ユニットでもある.スレッド:通常、1つのプロセスに複数のスレッドを含めることができます.もちろん、1つのプロセスには少なくとも1つのスレッドがあります.そうしないと、存在する意味はありません.スレッドはプロセスが持つリソースを利用することができ、スレッドを導入するオペレーティングシステムでは、通常、プロセスをリソース割り当ての基本単位とし、スレッドを独立した実行と独立したスケジューリングの基本単位とし、スレッドはプロセスよりも小さく、基本的にシステムリソースを持たないため、そのスケジューリングにかかるコストはずっと小さくなり、システムの複数のプログラム間の同時実行の程度をより効率的に向上させることができる.
Javaでのスレッドのステータスは、次のとおりです. NEW、(新規) RUNNABLE、(準備完了) BLOCKED、(ブロック) WAITING,(見えず散らず) TIMED_WAITING、(時代遅れ) TERMINATED;(終了)
機能はすべて現在のスレッドが一時停止していますが、どのような違いがありますか?wait:手を離して寝て、手の鍵を離してsleep:手を握って寝て、目が覚めたら手に鍵があります
同時実行:同じ時点で複数のスレッドが同じリソースにアクセスし、複数のスレッドが1つのポイントに対して並列に実行されます.複数の作業が一緒に実行され、後で要約されます.
大体3種類あります.集積Thread Runnableインタフェース を実装 Callable(この面接高周波試験点) を実現
ええ....Java 8 lambda式が出てくるので伝統的な書き方は忘れましょう.
本質はrun()メソッドを書き換えるため、lambda式を使用してスレッドを迅速に作成することができます.以下のようにします.
Lambda式は、関数式インタフェースでなければならず、1つの方法しかない.インタフェースにメソッドが1つしかない場合javaはデフォルトで関数インタフェースです.Lambda式を正しく使用するには、インタフェースに注記を付ける必要があります:@FunctionalInterface、2つの方法があれば、すぐにエラーを報告します!
1.Synchronized 2.ロッククラス
synchronizedとLockの違い:両者の違い:1.まずsynchronizedはjava内蔵キーワードで、jvmレベルではロックはjavaクラスです.2.synchronizedはロックを取得したか否かを判断できず、ロックはロックを取得したか否かを判断できる.3.synchronizedは自動的にロックを解除します(aスレッドが同期コードを実行するとロックを解除します;bスレッドの実行中に異常が発生するとロックを解除します)、ロックはfinallyで手動でロックを解除する必要があります(unlock()方法でロックを解除します)、そうしないとスレッドのデッドロックを引き起こしやすいです;4.synchronizedキーワードの2つのスレッド1とスレッド2を使用し、現在のスレッド1がロックされている場合、スレッド2のスレッドは待機します.スレッド1がブロックされると、スレッド2はずっと待っていますが、ロックロックは必ずしも待っているとは限りません.ロックが取得されなければ、スレッドはずっと待たずに終わることができます.5.synchronizedのロックは再入可能、中断不可、非公平であるが、ロックロックは再入可能、判断可能、公平である(両方とも可能).ロックロックロックは大量の同期コードの同期問題に適合し、synchronizedロックはコードの少量の同期問題に適合する.
1.1 JUCとは何ですか。
JUCのフルネームはjavaです.util.concurrent.は、同時プログラミングで使用されるツールクラスです.
1.1.1プロセスとスレッド
≪プロセス|Process|emdw≫:プロセスは、データ・セットに関する一定の独立した機能を持つプログラムの実行アクティビティです.これはオペレーティングシステムが動的に実行する基本ユニットであり、従来のオペレーティングシステムでは、プロセスは基本的な割り当てユニットであり、基本的な実行ユニットでもある.スレッド:通常、1つのプロセスに複数のスレッドを含めることができます.もちろん、1つのプロセスには少なくとも1つのスレッドがあります.そうしないと、存在する意味はありません.スレッドはプロセスが持つリソースを利用することができ、スレッドを導入するオペレーティングシステムでは、通常、プロセスをリソース割り当ての基本単位とし、スレッドを独立した実行と独立したスケジューリングの基本単位とし、スレッドはプロセスよりも小さく、基本的にシステムリソースを持たないため、そのスケジューリングにかかるコストはずっと小さくなり、システムの複数のプログラム間の同時実行の程度をより効率的に向上させることができる.
Javaでのスレッドのステータスは、次のとおりです.
1.1.2 wait/sleepの違い
機能はすべて現在のスレッドが一時停止していますが、どのような違いがありますか?wait:手を離して寝て、手の鍵を離してsleep:手を握って寝て、目が覚めたら手に鍵があります
1.1.3並行と並行
同時実行:同じ時点で複数のスレッドが同じリソースにアクセスし、複数のスレッドが1つのポイントに対して並列に実行されます.複数の作業が一緒に実行され、後で要約されます.
2.1スレッド作成方法
大体3種類あります.
2.1.1コード実装
ええ....Java 8 lambda式が出てくるので伝統的な書き方は忘れましょう.
本質はrun()メソッドを書き換えるため、lambda式を使用してスレッドを迅速に作成することができます.以下のようにします.
Thread thread1=new Thread(() -> {
System.out.println(Thread.currentThread().getName());
});
Lambda式は、関数式インタフェースでなければならず、1つの方法しかない.インタフェースにメソッドが1つしかない場合javaはデフォルトで関数インタフェースです.Lambda式を正しく使用するには、インタフェースに注記を付ける必要があります:@FunctionalInterface、2つの方法があれば、すぐにエラーを報告します!
2.2.2同期について
1.Synchronized 2.ロッククラス
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}
}
}
synchronizedとLockの違い:両者の違い:1.まずsynchronizedはjava内蔵キーワードで、jvmレベルではロックはjavaクラスです.2.synchronizedはロックを取得したか否かを判断できず、ロックはロックを取得したか否かを判断できる.3.synchronizedは自動的にロックを解除します(aスレッドが同期コードを実行するとロックを解除します;bスレッドの実行中に異常が発生するとロックを解除します)、ロックはfinallyで手動でロックを解除する必要があります(unlock()方法でロックを解除します)、そうしないとスレッドのデッドロックを引き起こしやすいです;4.synchronizedキーワードの2つのスレッド1とスレッド2を使用し、現在のスレッド1がロックされている場合、スレッド2のスレッドは待機します.スレッド1がブロックされると、スレッド2はずっと待っていますが、ロックロックは必ずしも待っているとは限りません.ロックが取得されなければ、スレッドはずっと待たずに終わることができます.5.synchronizedのロックは再入可能、中断不可、非公平であるが、ロックロックは再入可能、判断可能、公平である(両方とも可能).ロックロックロックは大量の同期コードの同期問題に適合し、synchronizedロックはコードの少量の同期問題に適合する.