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

ホームページ Java &#&面接の質(zhì)問(wèn) Java マルチスレッドおよび同時(shí)実行に関する面接の質(zhì)問(wèn) (質(zhì)問(wèn) 4、回答付き)

Java マルチスレッドおよび同時(shí)実行に関する面接の質(zhì)問(wèn) (質(zhì)問(wèn) 4、回答付き)

Nov 26, 2019 pm 05:17 PM
java

Java マルチスレッドおよび同時(shí)実行に関する面接の質(zhì)問(wèn) (質(zhì)問(wèn) 4、回答付き)

4. ConcurrentLinkedQueue ノンブロッキング無(wú)制限リンク リスト キュー

ConcurrentLinkedQueue は、リンク リスト構(gòu)造に基づいて実裝されたスレッドセーフ キューです。理論的には、キューの長(zhǎng)さは無(wú)限に拡張できます。

他のキューと同様、ConcurrentLinkedQueue も先入れ先出し (FIFO) エンキュー ルールを使用して要素を並べ替えます。 (推奨される學(xué)習(xí): Java インタビューの質(zhì)問(wèn))

要素をキューに追加すると、新しく挿入された要素はキューの最後に挿入され、要素を取得すると、キューの先頭から削除されます。

ConcurrentLinkedQueue はリンク リスト構(gòu)造であるため、キューに入るとき、挿入された要素はリンク リストを形成するために逆方向に拡張されます。デキューするときは、リンク リストの最初の要素から開(kāi)始して増加して取得されます。 in sequence;

ConcurrentLinkedQueue を使用する場(chǎng)合、キューが空かどうかの判斷が必要な場(chǎng)合は、size()==0 を使用しないように注意してください。実際には、多くのキュー要素がある場(chǎng)合、size() メソッドは多くのパフォーマンスと時(shí)間を消費(fèi)します。isEmpty() を使用するだけで、キューが空かどうかを判斷できます。

public class ConcurrentLinkedQueueTest {<br/>    public static int threadCount = 10;<br/>    public static ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();<br/>    static class Offer implements Runnable {<br/>        public void run() {<br/>            //不建議使用 queue.size()==0,影響效率??梢允褂?queue.isEmpty()<br/>            if (queue.size() == 0) {<br/>                String ele = new Random().nextInt(Integer.MAX_VALUE) + "";<br/>                queue.offer(ele);<br/>                System.out.println("入隊(duì)元素為" + ele);<br/>            }<br/>        }<br/>    }<br/>    static class Poll implements Runnable {<br/>        public void run() {<br/>            if (!queue.isEmpty()) {<br/>                String ele = queue.poll();<br/>                System.out.println("出隊(duì)元素為" + ele);<br/>            }<br/>        }<br/>    }<br/>    public static void main(String[] agrs) {<br/>        ExecutorService executorService = Executors.newFixedThreadPool(4);<br/>        for (int x = 0; x < threadCount; x++) {<br/>            executorService.submit(new Offer());<br/>            executorService.submit(new Poll());<br/>        }<br/>        executorService.shutdown();<br/>    }<br/>}<br/>

1 つの出力:

入隊(duì)元素為313732926<br/>出隊(duì)元素為313732926<br/>入隊(duì)元素為812655435<br/>出隊(duì)元素為812655435<br/>入隊(duì)元素為1893079357<br/>出隊(duì)元素為1893079357<br/>入隊(duì)元素為1137820958<br/>出隊(duì)元素為1137820958<br/>入隊(duì)元素為1965962048<br/>出隊(duì)元素為1965962048<br/>出隊(duì)元素為685567162<br/>入隊(duì)元素為685567162<br/>出隊(duì)元素為1441081163<br/>入隊(duì)元素為1441081163<br/>出隊(duì)元素為1627184732<br/>入隊(duì)元素為1627184732<br/>

ConcurrentLinkedQuere クラス図

Java マルチスレッドおよび同時(shí)実行に関する面接の質(zhì)問(wèn) (質(zhì)問(wèn) 4、回答付き)

に示すようにConcurrentLinkedQueue には 2 つの volatile Node ノードがあり、リストの最初と最後のノードを格納するために使用されます。ヘッド ノードには、リンク リストの最初の項(xiàng)目が null であるノードが格納され、末尾は常にそのノードを指すわけではありません。最後のノード。

Node ノードは、ノードの値を格納するために変數(shù)項(xiàng)目を內(nèi)部的に維持し、next は次のノードを格納するために使用され、それを一方向の無(wú)制限リストにリンクします。

public ConcurrentLinkedQueue(){<br/>    head=tail=new Node<E>(null);<br/>}<br/>

上記のコードが初期化されると、項(xiàng)目 NULL を持つ空のノードがリンク リストの先頭ノードと末尾ノードとして構(gòu)築されます。

オファー操作オファー操作は、リンクされたリストの最後に要素を追加することです。

実裝原理を見(jiàn)てみましょう。

public boolean offer(E e) {<br/>    //e 為 null 則拋出空指針異常<br/>    checkNotNull(e);<br/>    //構(gòu)造 Node 節(jié)點(diǎn)構(gòu)造函數(shù)內(nèi)部調(diào)用 unsafe.putObject,后面統(tǒng)一講<br/>    final Node<E> newNode = new Node<E>(e);<br/>    //從尾節(jié)點(diǎn)插入<br/>    for (Node<E> t = tail, p = t; ; ) {<br/>        Node<E> q = p.next;<br/>        //如果 q=null 說(shuō)明 p 是尾節(jié)點(diǎn)則插入<br/>        if (q == null) {<br/>            //cas 插入(1)<br/>            if (p.casNext(null, newNode)) {<br/>                //cas 成功說(shuō)明新增節(jié)點(diǎn)已經(jīng)被放入鏈表,然后設(shè)置當(dāng)前尾節(jié)點(diǎn)(包含 head,1,3,5.。。個(gè)節(jié)點(diǎn)為尾節(jié)點(diǎn))<br/>                if (p != t)// hop two nodes at a time<br/>                    casTail(t, newNode); // Failure is OK. return true;<br/>            }<br/>            // Lost CAS race to another thread; re-read next<br/>        } else if (p == q)//(2)<br/>            //多線程操作時(shí)候,由于 poll 時(shí)候會(huì)把老的 head 變?yōu)樽砸?,然?head 的 next 變?yōu)樾?head,所以這里需要<br/>            //重新找新的 head,因?yàn)樾碌?head 后面的節(jié)點(diǎn)才是激活的節(jié)點(diǎn)<br/>            p = (t != (t = tail)) ? t : head;<br/>        else<br/>            // 尋找尾節(jié)點(diǎn)(3)<br/>            p = (p != t && t != (t = tail)) ? t : q;<br/>    }<br/>}<br/>

コンストラクターから、先頭に null 項(xiàng)目を持つセンチネル ノードがあり、先頭と末尾の両方がこのノードを指していることがわかります。

以上がJava マルチスレッドおよび同時(shí)実行に関する面接の質(zhì)問(wèn) (質(zhì)問(wèn) 4、回答付き)の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

Java仮想マシン(JVM)內(nèi)部の理解 Java仮想マシン(JVM)內(nèi)部の理解 Aug 01, 2025 am 06:31 AM

thejvmenablesjavaの「writeonce、runany where "capabilitybyexcuting byteCodeThethermainComponents:1。theClassLoaderSubSystemloads、links、andinitializes.classfilesusingbootStrap、拡張、およびアプリケーションクラスローロー、

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

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時(shí)刻を取得します。 3。of()メソッドを使用して特定の日付と時(shí)刻を作成します。 4.プラス/マイナスメソッドを使用して、時(shí)間を不正に増加させて短縮します。 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)識(shí)別pecificservices.2.portsoperateovertcp(信頼できる、c

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

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

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

See all articles