0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

隙間時間にみる早見表〜OracleJavaSE11 gold | クラス・並列処理・Optional 〜

Posted at

この記事について

OracleJavaSE11 goldを勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにこちらの書籍で勉強していた時のまとめたものです!

おすすめ書籍(勉強開始時点の書籍最新版を購入しましょう)

各カテゴリごとでまとめていますので隙間時間に見てみてください。

ネストクラス

インナークラス

クラス直下に記述
public、protected、private、abstract、final
エンクロージングクラスのインスタンスも必要、staticなフィールド等は記述不可能

staticインナークラス

クラス直下に記述
public、protected、private、abstract、final、static
エンクロージングクラスのインスタンスと記述を必要としない

ローカルクラス

メソッド内クラス
abstract、final
実質的finalなローカル変数は先に記述されていれば使える

匿名クラス

メソッド内クラス
修飾子なし
インタフェースやスーパークラスのインスタンス生成時に{}を使用し具体的なオーバーライド処理を記述する。

並行処理と並列処理

並行処理

シングルコアでジョブを切り替えながら同時並行で処理すること

並列処理

マルチコアでジョブを処理すること

スレッド

スタック領域にメソッドが出入りすること、流れのこと

マルチスレッド

スレッドを管理する複数のスタック領域が並行処理すること

Threadクラス

start()

スレッドを生成して、run()を呼ぶ

run()

スレッド生成はしない

runメソッドオーバーライド

Threadクラスを継承したサブクラスでrun()をオーバーライド または Runnableをラムダ式でオーバライドした匿名クラスをThreadクラスのコンストラクタに渡す

Runnableクラス

startメソッドはない

run()の使い方

Thread T = new Thread(new Runnable(){public void run(){処理}}))
または
Thread T = new Thread(() ->{処理}))

executフレームワーク

スレッドプールを実現するインタフェースとクラス郡

Executorsクラス

インタフェースごとに説明

ExecutorService

説明
newSingleThreadExecutor() 新しいスレッドを作成しプールする
newFixedThreadPool(T) 引数Tにスレッド数を渡す、数値分だけプールする、固定数
newCathedThreadPool() 新しくスレッドを作成し、60秒間、プール内でスレッドを維持し使われなければ廃棄する

ScheduleExecutorService

説明
newSingleThreadScheduleExecutor() 新しいスレッドを作成しプールする
newScheduleThreadPool(T) 引数Tにスレッド数を渡す、数値分だけプールする、固定数

実行メソッド

ExecutorService

submit()

スレッドにタスクを与える。引数にラムダ式でRunnableを関数型インタフェースとして渡すことで可能

ScheduleExecutorService

初動遅延しタスクを定期的に実行する

schedule(T,U,V)

遅延実行
T RunnableまたはCallableの実行したい処理
U long型の遅延させる時間
V 遅延させる時間の単位(TimeUnitという列挙型)

scheduleAtFixRate(T,U,V,W)

実行処理と並行のインターバル付き遅延実行
T RunnableまたはCallableの実行したい処理
U long型の遅延させる時間
V インターバル時間
W 遅延させる時間の単位(TimeUnitという列挙型)

scheduleWithFixedDelay(T,U,V,W)

処理が終わり次第、インターバル時間待機、遅延実行
T RunnableまたはCallableの実行したい処理
U long型の遅延させる時間
V インターバル時間
W 遅延させる時間の単位(TimeUnitという列挙型)

Future

スレッドの結果を返した時の型

get()

処理結果を受けとる、リターンがないまたは正常終了した場合はnullになる

#Callableインタフェース

処理結果を戻したり例外をスローする(Futureインタフェースのget()は処理を返せるが、Runnableでは処理結果を戻せない)
submit()に渡して実行
例外発生した場合、ExecutionException()

ExecutorService処理例

ExecutorService exec = Executors.newSingleThreadExecutor();
Future<boolean> A = exec.submit(() -> { return boolean処理 });
Boolean result = A.get();

CyclicBarrier

複数のスレッドが特定のポイントで待機できるようにする同期化支援機構
バリアー-待機ポイント
バリアーアクション-実行処理

処理例

CyclicBarrier barrier = new CyclicBarrier(3, ラムダ式(new BarrierAction()))

3つのスレッドを同期させ、ラムダ式(new BarrierAction())を実行する
await()で処理が終了したことをバリアーに通知する

排他制御

synchronizedキーワードをメソッド宣言かメソッド内部の処理で使用

atomicパッケージ

原子性(一連の動作)を保証する

AtomicBoolean

Atomic変数として、Boolean型を扱うクラス、他のボクシングされたプリミディブも可能

addAndGet

読みだしから値の変更までの原子性を保証

CopyOnWithArrayList

読みだしの際にコピーして原子性を保証

lockパッケージ

ReentrantLockクラス

ロック制御クラス

説明
lock() クラスをロックし、unlockメソッドが呼ばれるまで他のスレッドのlockを待機
unlock() lock解除

Optionalクラス

メソッドの処理結果を正常、異常に関わらず扱うためのクラス

説明
empty() 空のOptionalインスタンスを生成する
of() 要素を持ったOptionalインスタンスを生成する
ofNullable() 要素を持ったOptionalインスタンスを生成する、例外が発生した時は空のOptionalインスタンスを生成する
isEmpty() 空のOptionalならtrue
isPresent() 値を持ったOptionalならtrue
get() 値が入っていることを前提に、値を取り出す
orElse() 値を持ったOptionalならその値を、空のOptionalなら引数に指定した文字列を返す
orElseGet() Supplier型のラムダ式を引数とし、空のOptionalならラムダ式を実行する
orElseThrow() Supplier型のラムダ式を引数とし、任意の例外処理を発生させる
ifPresent() Consumer型のラムダ式を引数とし、値を持ったOptionalなら、ラムダ式の引数に渡して処理を実行する
ifPresentOrElse() 値を持っている時は第一引数のConsumer型のラムダ式。空のOptionalの時は第二引数のRunnable型のラムダ式を追加したもの
map() function型の引数を受け取り処理結果を受け取った新しいOptionalを生成する
flatmap() 新しいOptionalは生成せず、処理内のOptionalを返す
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0