この記事では主に Java マルチスレッド同時開発における DelayQueue の使用例を詳しく紹介します。興味のある方は参考にしてください。
Java マルチスレッド同時開発を学ぶ過程で、DelayQueue について学びました。クラスの主な機能: これは、Delayed インターフェイスを実装するオブジェクトを配置するために使用される、制限のない BlockingQueue です。そのオブジェクトは、有効期限が切れたときにのみキューから削除できます。この種類のキューは順序付けされています。つまり、先頭オブジェクトの有効期限遅延時間が最も長くなります。注: null 要素をこの種のキューに入れることはできません。
Delayed、指定された遅延時間の後に実行されるオブジェクトをマークするために使用される混合スタイルのインターフェイス。このインターフェイスの実装では、このインターフェイスの getDelay メソッドと一貫した順序付けを提供する CompareTo メソッドを定義する必要があります。
インターネットでいくつかの例を見たところ、いくつかの問題があることがわかったので、皆さんの理解に役立つことを願っていくつか修正しました。
中国人はみんなカラオケが好きで、特に学生時代はみんなグループを作ってKTVで歌い、楽しい時間を過ごしています。今年も毎年恒例のダブル 11 が開催され、多くの独身者がグループを結成して KTV に来て歌い始めています。では、この時点で KTV はプログラムを通じてどのように時間をチャージするのでしょうか? シミュレーション コードは次のとおりです:
public class KTV implements Runnable{ private DelayQueue<KTVConsumer> queue = new DelayQueue<>(); public void begin(String name,String boxNum,int money){ KTVConsumer man = new KTVConsumer(name,boxNum,20l*money+System.currentTimeMillis()); System.out.println(man.getName()+" 等人交了"+money+"元钱,进入"+man.getBoxNum()+"号包厢,开始K歌..."); this.queue.add(man); } public void end(KTVConsumer man){ System.out.println(man.getName()+" 等人所在的"+man.getBoxNum()+"号包厢,时间到..."); } @Override public void run() { // TODO Auto-generated method stub while(true){ try { KTVConsumer man = queue.take(); end(man); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String args[]){ try{ System.out.println("KTV正常营业"); System.out.println("================================"); KTV ktv = new KTV(); Thread sing = new Thread(ktv); sing.start(); new Thread(new Runnable() { @Override public void run() { ktv.begin("张三", "111", 500); } }).start(); new Thread(new Runnable() { @Override public void run() { ktv.begin("李四", "666", 200); } }).start(); Thread.sleep(2000); new Thread(new Runnable() { @Override public void run() { ktv.begin("王五", "888", 100); System.out.println("================================"); } }).start(); } catch(Exception ex){ } } } public class KTVConsumer implements Delayed{ private String name; //截止时间 private long endTime; //包厢号 private String boxNum; public KTVConsumer(String name,String boxNum,long endTime){ this.name=name; this.boxNum=boxNum; this.endTime=endTime; } public String getName(){ return this.name; } public String getBoxNum(){ return this.boxNum; } /** * 用来判断是否到了截止时间 */ @Override public long getDelay(TimeUnit unit) { // TODO Auto-generated method stub return unit.convert(endTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS); } /** * 相互比较排序用 */ @Override public int compareTo(Delayed o) { // TODO Auto-generated method stub if(o == null || ! (o instanceof KTVConsumer)) return 1; if(o == this) return 0; KTVConsumer s = (KTVConsumer)o; return endTime - s.endTime > 0 ? 1 :(endTime - s.endTime == 0 ? 0 : -1); } }
実行結果は次のとおりです:
KTV正常营业 ================================ 张三 等人交了500元钱,进入111号包厢,开始K歌... 李四 等人交了200元钱,进入666号包厢,开始K歌... 王五 等人交了100元钱,进入888号包厢,开始K歌... ================================ 李四 等人所在的666号包厢,时间到... 王五 等人所在的888号包厢,时间到... 张三 等人所在的111号包厢,时间到...
以上がJava マルチスレッド同時開発 DelayQueue の使用についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
