演習課題「LinkedBlockingDequeを使ってみよう」
現在、容量が3で固定の、LinkedBlockingDequeインスタンスを生成するコードがTEST.javaに記述されています。次の手順通りにDequeへの要素の追加処理と、ブロックを追記してください。
1.デックが空なのでnullを返す
2.末尾に1を追加
3.末尾に0を追加
4.先頭に8を追加
5.先頭に813を追加、満杯ならブロックされるようタイムアウトを3秒に設定
6.タイムアウトで失敗
7.末尾から要素を取得して削除
8.末尾に3を追加
なお、コンパイルコマンドについて理解できれいれば、以下のコマンドをコピーして利用してください。
javac -d classes/jp.paiza.thread -p classes source/jp.paiza.thread/module-info.java source/jp.paiza.thread/jp/paiza/thread/*.java
また、実行コマンドについて理解できていれば、以下の実行コマンドをコピーして利用してください。
java -p classes --module jp.paiza.thread/jp.paiza.thread.TEST
期待する出力値
offer...
null
false
0
[8, 1, 3]
#11:並行コレクション6(Deque)
このチャプターでは、並行コレクションのDequeについて学習します。
ブラウザを開くだけでエディタ、Webサーバ、DB等の開発環境が整うクラウド開発環境PaizaCloudクラウドIDE。
PaizaCloud
https://paiza.cloud/ja/
シェルコマンド入門編
https://paiza.jp/works/shellcommand/primer
Linux入門編
https://paiza.jp/works/linux/primer
新・Linux入門編(LinuC対策版)
https://paiza.jp/works/linux/new-primer
新・Java入門編34: モジュール・システムについて学習しよう
https://paiza.jp/works/java/new-primer/java-new-primer-34
新・アルゴリズムとデータ構造入門 Java編10: スタック・キュー
https://paiza.jp/works/algorithm-java/new-primer/algorithm-java-new-primer-10
問題集: スタック・キューメニュー
https://paiza.jp/works/mondai/stack_queue/problem_index?language_uid=java
インタフェースQueue
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/Queue.html
インタフェースBlockingQueue
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/concurrent/BlockingQueue.html
インタフェースDeque
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/Deque.html
インタフェースBlockingDeque
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/concurrent/BlockingDeque.html
クラスLinkedBlockingDeque
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/concurrent/LinkedBlockingDeque.html
クラスConcurrentModificationException
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/ConcurrentModificationException.html
コンパイルコマンドjavac -d classes/jp.paiza.thread -p classes source/jp.paiza.thread/module-info.java source/jp.paiza.thread/jp/paiza/thread/*.java
実行コマンドjava -p classes --module jp.paiza.thread/jp.paiza.thread.A
A.javapackage jp.paiza.thread;
import java.util.*;
import java.util.concurrent.*;
public class A {
public static void main(String... args) {
var d = new LinkedBlockingDeque<Integer>(2);
try {
// 1. [0]
d.putLast(0);
// 2. [0, 1]
d.putLast(1);
System.out.println("offer...");
// 3. 満杯なのでブロックされる(タイムアウトを設定)
var b = d.offerLast(3, 2, TimeUnit.SECONDS);
// 4. false, タイムアウトで失敗
System.out.println(b);
// 5. 先頭から要素を取得して削除 - [1]
System.out.println(d.takeFirst());
// 6. 新しい要素を追加 - [1, 813]
d.putLast(813);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 要素を表示 - [1, 813]
System.out.println(d);
}
}