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

ホームページ Java &#&面接の質(zhì)問 Java インタビュー スレッド プール

Java インタビュー スレッド プール

Dec 17, 2020 am 10:12 AM
java スレッドプール インタビュー

Java インタビュー スレッド プール

以下は、Java インタビューで私がまとめたスレッド プールに関する一般的な質(zhì)問の一部です。ここで共有します。

(學(xué)習(xí)ビデオ共有: Java 教育ビデオ )

スレッド プールとは何ですか?

スレッド プールはマルチスレッド処理の一種で、処理中にタスクがスレッド プールに投入され、タスクの実行がスレッド プールによって管理されます。

リクエストごとに処理するスレッドが作成されると、サーバーのリソースはすぐに使い果たされてしまいます。スレッド プールを使用すると、作成および破棄されるスレッドの數(shù)を減らすことができ、各ワーカー スレッドを再利用できます。複數(shù)のタスクを?qū)g行できます。 。

スレッド プールを使用する理由

スレッドの作成と破棄のコストは比較的大きく、これらの時間は業(yè)務(wù)の処理時間よりも長くなる可能性があります。このような頻繁なスレッドの作成と破棄は、ビジネス ワーカー スレッドと相まってシステム リソース時間を消費し、システム リソースの不足につながる可能性があります。 (スレッドの作成と破棄のプロセスを削除できます)

スレッド プールの役割は何ですか?

スレッド プールの機(jī)能は、システム內(nèi)の実行スレッドの數(shù)を制限することです。

1. 効率を向上します。一定數(shù)のスレッドを作成してプールに入れ、必要に応じてプールから 1 つ取り出します。これは、必要に応じてスレッド オブジェクトを作成するよりもはるかに高速です。

2. 管理を容易にするために、スレッド プール管理コードを記述して、プール內(nèi)のスレッドを均一に管理できます。たとえば、プログラムは開始時に 100 個のスレッドを作成します。リクエストがあるたびに、スレッドが作成されます。同時リクエストが 101 件あった場合、無限のスレッド作成によるシステム クラッシュを避けるために、余分なリクエストをキューに入れることができます。

いくつかの一般的なスレッド プールと使用シナリオについて話しましょう

1. newSingleThreadExecutor

唯一の作業(yè)スレッドのみを使用するシングルスレッド スレッド プールを作成します。すべてのタスクが指定された順序 (FIFO、LIFO、優(yōu)先順位) で実行されるようにします。

2. newFixedThreadPool

同時スレッドの最大數(shù)を制御できる固定長のスレッド プールを作成し、超過したスレッドはキューで待機(jī)します。

3. newCachedThreadPool

キャッシュ可能なスレッド プールを作成します。スレッド プールの長さが処理の必要性を超えた場合は、アイドル狀態(tài)のスレッドを柔軟にリサイクルできます。リサイクルできない場合は、新しいスレッドを作成します。

4. newScheduledThreadPool

スケジュールされた定期的なタスクの実行をサポートするために、固定長のスレッド プールを作成します。

スレッド プール內(nèi)のいくつかの重要なパラメータ

corePoolSize は、スレッド プール內(nèi)のコア スレッドの數(shù)です。これらのコア スレッドは、役に立たなくなった場合にのみリサイクルされません

maximumPoolSize は、スレッド プールに収容できるスレッドの最大數(shù)です。

keepAliveTime は、コア スレッド以外の他のスレッドをスレッド プールに保持できる最長時間です。コアスレッドはタスクがなくてもクリアできません。殘りのスレッドには生存時間があります。これは、非コアスレッドが保持できる最長のアイドル時間を意味します。

util を使用して、この時間を 1 単位として計算します。

workQueue は待機(jī)キューです。実行を待つタスク キューにタスクを格納できます。FIFIO 原則 (先入れ先出し) が実裝されています。

(その他の関連するインタビューの質(zhì)問の共有: java インタビューの質(zhì)問と回答)

threadFactory は、スレッドを作成するスレッド ファクトリです。

handler は拒否戦略であり、タスクがいっぱいになった後で特定のタスクの実行を拒否できます。

スレッド プールの拒否戦略について話す

リクエスト タスクが引き続き到著し、現(xiàn)時點でシステムがそれらを処理できない場合、採用する必要がある戦略はサービスを拒否することです。 RejectedExecutionHandler インターフェイスは、タスク処理を拒否するカスタム メソッドの機(jī)會を提供します。 ThreadPoolExecutor には 4 つの処理戦略が含まれています。

AbortPolicy 戦略: この戦略は例外を直接スローし、システムが正常に動作しなくなります。

CallerRunsPolicy 戦略: スレッド プールが閉じられていない限り、この戦略は現(xiàn)在破棄されたタスクを呼び出し側(cè)スレッドで直接実行します。

DiscardOleddestPolicy 戦略: この戦略は、実行されようとしているタスクである最も古いリクエストを破棄し、現(xiàn)在のタスクを再度送信しようとします。

DiscardPolicy 戦略: この戦略は、何も処理せずに処理できないタスクをサイレントに破棄します。

JDK がデフォルトで提供する 4 つの拒否戦略に加えて、獨自のビジネス ニーズに応じて拒否戦略をカスタマイズできます。カスタマイズ方法は非常に簡単で、RejectedExecutionHandler インターフェイスを直接実裝するだけです。

実行と送信の違いは何ですか?

これまでの説明では、executeメソッドを使用してタスクを?qū)g行しましたが、executeメソッド以外にも、サブミットしたタスクを?qū)g行できるsubmitメソッドもあります。

これら 2 つの方法の違いは何ですか?どのようなシナリオに適用できますか?簡単な分析をしてみましょう。

execute は、戻り値に注意を払う必要がないシナリオに適しており、実行のためにスレッドをスレッド プールにスローするだけで済みます。

submit メソッドは、戻り値に注意する必要があるシナリオに適しています

5 つのスレッド プールの使用シナリオ

newSingleThreadExecutor: 順次実行を保証する必要があり、1 つのスレッドのみが実行されるシナリオで使用できるシングルスレッド スレッド プール。

newFixedThreadPool: 既知の同時実行圧力の下でスレッドの數(shù)を制限するために使用できる固定サイズのスレッド プール。

newCachedThreadPool: 無限に拡張できるスレッド プール。比較的実行時間の短いタスクの処理に適しています。

newScheduledThreadPool: 遅延してスケジュールして開始できるスレッド プール。定期的なタスクを?qū)g行するために複數(shù)のバックグラウンド スレッドが必要なシナリオに適しています。

newWorkStealingPool: 複數(shù)のタスク キューを持つスレッド プール。接続數(shù)を減らし、並列実行に使用可能な現(xiàn)在の CPU 數(shù)でスレッドを作成できます。

スレッド プールを閉じる

スレッド プールを閉じるには、shutdownNow および shutdown メソッドを呼び出します。

shutdownNow: 実行中のすべてのタスクに中斷() を発行し、実行を停止し、キャンセルします。まだ開始されていないすべてのタスクを返し、まだ開始されていないタスクのリストを返します。

shutdown: shutdown を呼び出すと、スレッド プールは新しいタスクを受け入れなくなりますが、送信されたタスクや実行中のタスクを強(qiáng)制的に終了することはありません。

スレッド プールの初期化時のスレッド數(shù)の選択

タスクが IO 集中型の場合、通常、スレッド數(shù)を CPU 數(shù)の 2 倍以上に設(shè)定する必要があります。 CPU リソースの使用を最大化します。

タスクが CPU を集中的に使用する場合、通常、スレッド數(shù)は CPU の數(shù)に 1 を加えて設(shè)定するだけで済みます。スレッドを増やすと、コンテキストの切り替えが増加するだけで、CPU 使用率は増加しません。

上記は単なる基本的な考え方であり、本當(dāng)に正確な制御が必要な場合は、オンラインになった後もスレッド プール內(nèi)のスレッドとキューの數(shù)を観察する必要があります。

スレッド プールにはどのような種類のワーク キューがありますか?

1. ArrayBlockingQueue

は、配列構(gòu)造に基づく制限付きブロッキング キューです。このキューは FIFO に基づいています。 (先入れ先出し) 要素を並べ替える原則。

2. LinkedBlockingQueue

リンク リスト構(gòu)造に基づくブロッキング キューこのキューは、FIFO (先入れ先出し) に従って要素を並べ替え、通常、スループットは ArrayBlockingQueue よりも高くなります。靜的ファクトリ メソッド Executors.newFixedThreadPool() は、要素を格納しないブロック キューであるこのキュー

#3、SynchronousQueue

を使用します。各挿入操作は、別のスレッドが削除操作を呼び出すまで待機(jī)する必要があります。そうでない場合、挿入操作は常にブロックされ、スループットは通常 LinkedBlockingQueue よりも高くなります。靜的ファクトリ メソッド Executors.newCachedThreadPool はこのキューを使用します。

4. PriorityBlockingQueue

優(yōu)先度のある無限ブロッキング キュー。

関連コースの推奨事項:

Java 入門チュートリアル

以上がJava インタビュー スレッド プールの詳細(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

強(qiáng)力な 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è)定して部分的なロールバックを達(dá)成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

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.インスタントを使用して、必要に応じて古い日付型と互換性があります。現(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でどのように機(jī)能しますか? Garbage CollectionはJavaでどのように機(jī)能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達(dá)不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達(dá)不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達(dá)可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 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は

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

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

See all articles