mind-tech

主にテクノロジーや啓発系、副業などのテーマ中心

マルチスレッドを利用したアプリケーション作ってみた

タイトルはかっこいいけど、アプリケーションとはただのスライドショーアプリ。

こんな感じで、自動で動く。下の選択バーと画像はもちろん手動で対応させる事もできる。



目的
複数スレッドを利用したアプリケーションを作って「マルチスレッド」気分を味わいたかった


予備知識

「タスク,プロセス」
OSがCPUに割り当てて実行させるプログラムの単位。
CPUから見たプログラムの実行単位であり,メモリ空間(プロセス空間)を割り当てる単位でもある。複数のプログラムが同時に動作することを「マルチタスク」あるいは「マルチプロセス」とも呼ぶ

「スレッド」
スレッドは,1つのプロセスをさらに小さな単位に分けたもの。
複数のスレッドが同じメモリ空間を共有するため,高速に切り替えて実行できるという特徴がある。

1つのプロセスの中にある複数のスレッドを同時に実行することを「マルチスレッド」と呼ぶ。
荒っぽく言えば,Windows上で「Word」と「Excel」を同時に実行することがマルチタスク(マルチプロセス)であり,Wordの文書ファイルを印刷中に,文書の編集を行うことがマルチスレッドである


タスク,プロセス,スレッドのいずれであれ,1つのCPUを使ってなぜ複数のプログラムを同時に実行させられるのかというとプログラムは実行される際に常にCPUを必要としているわけではないから


プログラムは「入力」,「演算」,「出力」という3つの基本的な処理から成るが,CPUを使うのは演算だけで,入力と出力はI/Oを使う。このため,プログラムがI/Oを使っている間はCPUが空き状態になり,この時間を使って別のプログラムを実行できる

参考 OSの基本機能——マルチタスクや仮想記憶で,ハード資源を有効活用


スレッドの利用箇所
ひとつはタイマー処理で画像を表示させる
もうひとつはボタンやスピナー(選択リスト)の処理

スレッドを作らない場合、時間を計測している間、他の操作が全くできなくなり画面がフリーズしているように見える

プログラム部分をRunnableインターフェースで作成しHandlerクラスを使って呼び出す。
スライドショーのクラスに画像を切り替えるプログラムrunnableChangeImageをRunnableインターフェースで宣言し、プログラムの呼び出しにHandlerクラスのオブジェクトhandlerを生成する。

流れとしてはクラスAのコンストラクタで画像パスをスピナーにセット。

リスナーを登録しておき、スピナーにおいて選択した要素を取り出し表示。

タイマー処理については、スレッドを作成し内部のメソッドでwhile文でsleepさせながらハンドラーから画像を変更するプログラム(インタフェース)を呼び出している。

インターフェース内では要素の位置を加算し、最後尾になったら最初の要素に戻すようにしている。

Copyright ©mind-teck All rights reserved..
🔒プライバシーポリシー