デッドロックは、オペレーティングシステムレベルでのバグであり、プロセスデッドロックの略語です。 1965年に銀行家のアルゴリズムを研究する際に、Dijkstraによって最初に提案されました。これは、コンピューターオペレーティングシステムと同時プログラミング分野全体で最も困難な問題の1つです。
実際、コンピューターの世界には、複数のスレッドで解決する必要がある多くのことがあります。このようにして、コンピューティングの効率を最大化するためにリソースを使用できるからです。ただし、実際には、リソースがプリンターなど、一度に1つのプロセスでのみ使用できるようなコンピューターシステムには多くの状況があり、同時に1つのプロセスを制御できるプロセスは1つだけです。マルチチャネルプログラミング環境では、いくつかのプロセスがそのようなリソースを共有することが多く、プロセスには複数のリソースが必要になる場合があります。したがって、いくつかのプロセスは限られたリソースを求めて競争し、進歩の順序は不適切であるため、無期限のサイクルが待機する状況を形成します。この状態とデッドロックと呼びます。簡単に言えば、デッドロックとは、複数のプロセスが占有するリソースを循環し、無期限に膠着状態にとどまる状況を指します。明らかに、外力がない場合、デッドロックに関与するすべてのプロセスは常にブロックされます。
ファイル名:deadthreadbyextend.java
注記:
1.スレッドを起動するときは、開始方法を使用できます。実行方法も呼び出すことができますが、通常の呼び出しと同等であり、現在のスレッドで実行されます。
2。同期は変数を直接変更できません。
3.同期されたブロックは、ブロック内の変数への単一スレッドアクセスを強制しません。単に、同期(ARGS)パラメーターがブロック内のステートメントを実行するときにロックされ、実行が終了するまでリリースされないことを意味します。
パッケージcom.ycf.study.thread; class sources {int a; public void seta(int x){synchronized(this.a = x; try {thread.sleep(2000);} catch(arturnedextrace e){e.printstacktrace();}}}}} public class deadbyextend {] boid boid(] boid boid boid sited(}}} = new Sources(); Sources s2 = new Sources(); class mythread1はjava.lang.thread {@override public void run(){system.out.println( "スレッド1 starts"); synchronized(s1){system.out.println( "スレッド1を修正するS1.seta("); lock ++++++++++++++++++++++ ");}} class mythread2はjava.lang.thread {@override public void run(){system.out.println(" thread 2 starts "); synchronized(s2){system.out.out.out.out.out.out.Outln(" Stread 2 Applies( s2 "); s2.seta(20); system.out.println("スレッド2変更s2 complete "); system.out.println("スレッド2はs1 ") lock +++++++++++++++++ ");}} mythread1 mt1 = new mythread1(); mythread2 mt2 = new mythread2(); mt1.start(); mt2.start();}}}}要約します
上記は、この記事のJavaスレッドデッドロックコードの例に関するすべてです。誰にとっても役立つことを願っています。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました。