国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&面接の質(zhì)問 Java マルチスレッドに関する面接の質(zhì)問

Java マルチスレッドに関する面接の質(zhì)問

Dec 11, 2019 pm 03:05 PM
java

Java マルチスレッドに関する面接の質(zhì)問

スレッドとは何ですか?

スレッドは、オペレーティング システムが操作のスケジューリングを?qū)g行できる最小単位であり、プロセスに含まれ、プロセス內(nèi)の実際の操作単位です。プログラマはこれをマルチプロセッサ プログラミングに使用でき、マルチスレッドを使用して計算負(fù)荷の高いタスクを高速化できます。 (推奨される調(diào)査: Java インタビューの質(zhì)問)

たとえば、1 つのスレッドがタスクを完了するのに 100 ミリ秒かかる場合、タスクを完了するのに 10 個のスレッドを使用するのにかかる時間はわずか 10 ミリ秒です。 。

スレッドとプロセスの違いは何ですか?

スレッドはプロセスのサブセットです。プロセスには多數(shù)のスレッドを含めることができ、各スレッドは異なるタスクを並行して実行します。異なるプロセスは異なるメモリ空間を使用し、すべてのスレッドは同じメモリ空間を共有します。各スレッドには、ローカル データを保存するための個別のスタック メモリがあります。

Java でスレッドを?qū)g裝するにはどうすればよいですか?

2 つの方法: java.lang.Thread クラスのインスタンスはスレッドですが、実行するには java.lang.Runnable インターフェイスを呼び出す必要があります。スレッド クラス自體が呼び出される Runnable インターフェイスであるため、 、 java.lang.Thread クラスを継承するか、Runnable インターフェースを直接呼び出して run() メソッドをオーバーライドしてスレッドを?qū)g裝できます。

Java キーワード volatile と synchronized の機能と違いは何ですか?

1、volatile

変更する変數(shù)はコピーを保持せず、メイン メモリに直接アクセスします。

Java メモリ モデルにはメイン メモリがあり、各スレッドにも獨自のメモリ (レジスタなど) があります。パフォーマンスを向上させるために、スレッドはアクセスする変數(shù)のコピーを自身のメモリに保持します。

このように、あるスレッドのメモリ內(nèi)の同じ変數(shù)の値が、ある時點で別のスレッドのメモリ內(nèi)の値やメイン メモリ內(nèi)の値と一致しない可能性があります。

変數(shù)を volatile として宣言すると、変數(shù)はいつでも他のスレッドによって変更されるため、スレッド メモリにキャッシュできなくなります。

2、同期済み

メソッドまたはコード ブロックの変更に使用すると、最大 1 つのスレッドがコードを同時に実行することが保証されます。

1. 2 つの同時スレッドが同じオブジェクト內(nèi)の synchronized (this) 同期コード ブロックにアクセスする場合、一度に 1 つのスレッドのみを?qū)g行できます。別のスレッドは、このコード ブロックを?qū)g行する前に、現(xiàn)在のスレッドがこのコード ブロックの実行を完了するまで待つ必要があります。

2. ただし、スレッドがオブジェクトの同期された (この) 同期コード ブロックにアクセスするとき、別のスレッドは引き続きオブジェクト內(nèi)の非同期 (この) 同期コード ブロックにアクセスできます。

3. 特に重要なのは、スレッドがオブジェクトの同期された (この) 同期されたコード ブロックにアクセスすると、他のスレッドはオブジェクト內(nèi)の他のすべての同期された (この) 同期されたコード ブロックにアクセスできなくなることです。

4. スレッドがオブジェクトの同期された (この) 同期されたコード ブロックにアクセスすると、このオブジェクトのオブジェクト ロックを取得します。その結(jié)果、オブジェクト オブジェクトのすべての同期されたコード部分への他のスレッドのアクセスが一時的にブロックされます。

5. 上記のルールは他のオブジェクト ロックにも適用できます。

さまざまなスレッドのライフ サイクルとは何ですか?

Java プログラムで新しいスレッドを作成すると、そのステータスは New になります。スレッドの start() メソッドを呼び出すと、ステータスが Runnable に変更されます。スレッド スケジューラは、実行可能スレッド プール內(nèi)のスレッドに CPU 時間を割り當(dāng)て、ステータスを?qū)g行中に変更します。他のスレッド狀態(tài)には、待機中、ブロック済み、デッドなどがあります。

スレッドの優(yōu)先順位についてどのように理解していますか?

各スレッドには優(yōu)先度があり、一般的には優(yōu)先度の高いスレッドが優(yōu)先して実行されますが、これはスレッドスケジューリングの実裝に依存します。この実裝はOSに依存します。

スレッドの優(yōu)先順位を定義できますが、これは、優(yōu)先順位の高いスレッドが優(yōu)先順位の低いスレッドよりも前に実行されることを保証するものではありません。スレッドの優(yōu)先順位は int 変數(shù) (1 ~ 10) で、1 は最低の優(yōu)先順位を表し、10 は最高の優(yōu)先順位を表します。

デッドロックとは何ですか?デッドロックを分析して回避するにはどうすればよいですか?

デッドロックとは、3 つ以上のスレッドが永久にブロックされる狀況を指します。この狀況には、少なくとも 2 つのスレッドと 3 つ以上のリソースが必要です。

デッドロックを分析するには、Java アプリケーションのスレッド ダンプを表示する必要があります。どのスレッドが BLOCKED ステータスにあり、どのスレッドが待機しているリソースを確認(rèn)する必要があります。各リソースには一意の ID があり、この ID を使用して、どのスレッドがそのオブジェクト ロックをすでに所有しているかを調(diào)べることができます。

ネストされたロックを回避し、必要な場合にのみロックを使用し、無期限の待機を回避することが、デッドロックを回避する一般的な方法です。

スレッド セーフとは何ですか? Vector はスレッドセーフなクラスですか?

コードが配置されているプロセスで同時に複數(shù)のスレッドが実行されている場合、これらのスレッドがこのコードを同時に実行する可能性があります。各実行の結(jié)果がシングルスレッド実行の結(jié)果と同じであり、他の変數(shù)の値が予想どおり同じである場合、それはスレッドセーフです。

スレッドセーフ カウンター クラスの同じインスタンス オブジェクトは、複數(shù)のスレッドで使用されても計算エラーを引き起こしません。明らかに、コレクション クラスをスレッド セーフと非スレッド セーフの 2 つのグループに分けることができます。 Vector は同期メソッドを使用してスレッド セーフを?qū)g現(xiàn)しますが、それに似た ArrayList はスレッド セーフではありません。

Java でスレッドを停止するにはどうすればよいですか?

Java は豊富な API を提供しますが、スレッドを停止するための API は提供しません。 JDK 1.0 には當(dāng)初、stop()、suspend()、resume() などのいくつかの制御メソッドがありましたが、潛在的なデッドロックの脅威のため、後続の JDK バージョンでは非推奨になりました。その後、Java API の設(shè)計者は、互換性のあるスレッドを提供しませんでした。スレッドを停止する安全な方法。

run() または call() メソッドが実行されると、スレッドは自動的に終了します。スレッドを手動で終了したい場合は、volatile Boolean 変數(shù)を使用して run() メソッドのループを終了するか、キャンセルすることができます。スレッドの割り込み

ThreadLocal とは何ですか?

ThreadLocal は、スレッドのローカル変數(shù)を作成するために使用されます。オブジェクトのすべてのスレッドがそのグローバルを共有することがわかっています。変數(shù)なので、これらの変數(shù)はスレッドセーフではありませんが、同期技術(shù)??を使用できます。ただし、同期を使用したくない場合は、ThreadLocal 変數(shù)を選択できます。

各スレッドには獨自の Thread 変數(shù)があり、get()\set() メソッドを使用してデフォルト値を取得したり、スレッド內(nèi)で値を変更したりできます。 ThreadLocal インスタンスは通常、関連するスレッド狀態(tài)をプライベート靜的プロパティにする必要があります。

Sleep()、suspend()、wait() の違いは何ですか?

Thread.sleep() は、指定された時間に現(xiàn)在のスレッドを「実行不可」?fàn)顟B(tài)にします。スレッドは常にオブジェクトのモニターを保持します。たとえば、スレッドが現(xiàn)在同期されたブロックまたはメソッド內(nèi)にある場合、他のスレッドはそのブロックまたはメソッドに入ることができません。別のスレッドがinterrupt() メソッドを呼び出すと、「スリープ」スレッドが起動されます。

注: sleep() は靜的メソッドです。これは、現(xiàn)在のスレッドに対してのみ有効であることを意味します。よくある間違いは、t.sleep() を呼び出すことです (t は現(xiàn)在のスレッドとは異なるスレッドです)。

t.sleep() が実行されても、t スレッドではなく、現(xiàn)在のスレッドがスリープ狀態(tài)になります。 t.suspend() は時代遅れのメソッドです。suspend() を使用すると、スレッドが停滯狀態(tài)になります。スレッドは常にオブジェクトの監(jiān)視を保持します。Suspend() はデッドロックの問題を引き起こしやすいです。

Object.wait() は、現(xiàn)在のスレッドを「実行不可能」?fàn)顟B(tài)にします。 sleep() との違いは、wait がスレッドではなくオブジェクトのメソッドであることです。 object.wait() を呼び出す場合、スレッドはまずこのオブジェクトのオブジェクト ロックを取得する必要があり、現(xiàn)在のスレッドはロック オブジェクトの同期を維持し、現(xiàn)在のスレッドを待機キューに追加する必要があります。

次に、別のスレッドが同じオブジェクト ロックを同期して object.notify() を呼び出すことができます。これにより、元の待機スレッドがウェイクアップされ、ロックが解放されます?;镜膜?wait()/notify() は sleep()/interrupt() に似ていますが、前者はオブジェクト ロックを取得する必要がある點が異なります。

スレッド スタベーションとライブロックとは何ですか?

すべてのスレッドがブロックされているか、必要なリソースが無効であるために処理できない場合、リソースを使用可能にする非ブロック スレッドは存在しません。 Java API でのスレッドのライブロックは、次の狀況で発生する可能性があります:

1、プログラム內(nèi)のすべてのスレッドがパラメーター 0 の wait メソッドである Object.wait(0) を?qū)g行するとき。プログラムは、スレッドが対応するオブジェクトに対して Object.notify() または Object.notifyAll() を呼び出すまでライブ ロックを続けます。

2: すべてのスレッドが無限ループに陥った場合。

Java Timer クラスとは何ですか?特定の時間間隔でタスクを作成するにはどうすればよいですか?

java.util.Timer は、將來の特定の時刻にスレッドを?qū)g行するようにスケジュールするために使用できるツール クラスです。 Timer クラスを使用して、1 回限りのタスクまたは定期的なタスクをスケジュールできます。

java.util.TimerTask は、Runnable インターフェイスを?qū)g裝する抽象クラスです。獨自のスケジュールされたタスクを作成し、Timer を使用してその実行をスケジュールするには、このクラスを継承する必要があります。

Java における同期コレクションと同時コレクションの違いは何ですか?

同期コレクションと同時コレクションはどちらも、マルチスレッドと同時実行に適したスレッドセーフなコレクションを提供しますが、同時コレクションの方がよりスケーラブルです。

Java 1.5 より前は、プログラマは同期コレクションしか使用できませんでした。これにより、マルチスレッドが同時に実行されているときに競合が発生し、システムのスケーラビリティが妨げられていました。

Java5 では、ConcurrentHashMap のような同時コレクションが導(dǎo)入されました。これは、スレッドの安全性を提供するだけでなく、ロックの分離や內(nèi)部パーティショニングなどの最新のテクノロジーによってスケーラビリティも向上します。

同期メソッドと同期ブロック、どちらがより良い選択ですか?

同期ブロックはオブジェクト全體をロックしないため、より良い選択です (もちろん、オブジェクト全體をロックすることもできます)。同期メソッドは、クラス內(nèi)に無関係な同期ブロックが複數(shù)ある場合でもオブジェクト全體をロックします。これにより、通常、メソッドの実行が停止し、オブジェクトのロックを取得するまで待機する必要があります。

スレッド プールとは何ですか?なぜそれを使うのでしょうか?

スレッドの作成には多くのリソースと時間がかかるため、タスクが來たときだけスレッドを作成すると応答時間が長くなり、プロセスで作成できるスレッドの數(shù)が制限されます。

これらの問題を回避するために、プログラム起動時に処理に応答するスレッドを複數(shù)用意し、これをスレッドプールと呼び、その中のスレッドをワーカースレッドと呼びます。

JDK1.5 以降、Java API はさまざまなスレッド プールを作成できるように Executor フレームワークを提供します。たとえば、単一のスレッド プールは一度に 1 つのタスクを処理します。固定數(shù)のスレッド プールまたはキャッシュ スレッド プール (有効期間の短いタスクが多いプログラムに適した拡張可能なスレッド プール)。

Java の invokeAndWait と invokeLater の違いは何ですか?

これら 2 つのメソッドは、イベント ディスパッチ スレッドではなく現(xiàn)在のスレッドから GUI コンポーネントを更新するために、Swing API によって Java 開発者に提供されます。 InvokeAndWait() は、進行狀況バーなどの GUI コンポーネントを同期的に更新します。進行狀況が更新されたら、それに応じて進行狀況バーも変更する必要があります。

進行狀況が複數(shù)のスレッドによって追跡されている場合は、invokeAndWait() メソッドを呼び出して、イベント ディスパッチ スレッドにコンポーネントを適宜更新するように要求します。 invokeLater() メソッドは、更新コンポーネントを非同期的に呼び出します。

マルチスレッドにおけるビジー ループとは何ですか?

ビジー ループとは、従來のループとは異なり、プログラマがループを使用してスレッドを待機させることです。 wait()、sleep()、または yield() メソッドはどちらも CPU 制御を放棄しますが、ビジー ループは CPU を放棄せず、空のループを?qū)g行します。これの目的は、CPU キャッシュを保持することです。

マルチコア システムでは、待機中のスレッドが起動時に別のコアで実行されている可能性があり、これによりキャッシュが再構(gòu)築されます。キャッシュの再構(gòu)築を回避し、再構(gòu)築の待ち?xí)r間を短縮するために使用できます。

以上がJava マルチスレッドに関する面接の質(zhì)問の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

ネットワークポートとファイアウォールの理解 ネットワークポートとファイアウォールの理解 Aug 01, 2025 am 06:40 AM

ネットワークポートアンドファイアワルクトグテルトエナブルコマニケーションwhiledensuringsecurity.1.networksarevirtualendpointsnumbered0–655 35、withwell-knownportslike80(http)、443(https)、22(ssh)、および25(smtp)識別pecificservices.2.portsoperateovertcp(信頼できる、c

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復(fù)に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles