L3. Necessary Java Programming Techniques (Thread) Java API スレッド(thread): アプリケーションから一部の機能をスレッドとして実行します。 スレッドはプログラムに一部の機能を実行している主体です。 マルチスレッド: 同時に複数のスレッドが存在する。それらのスレッド が並行して動作するのは,マルチスレッド処理機能です。これはJava 言語の特徴の一つです。 Javaでは、スレッドというのは、一つのオブジェクトです。 クラススレッドのコンストラクタ クラススレッドのインスタンス public Thread() Thread thread1, thread2; public Thread(String threadName) thread1 = new Thread(); …… thread2 = new Thread(“student”); java.lang.Object | +--java.lang.Thread スレッドのライフサイクル (Life cycle of a thread) スレッド状態 (スレッドのライフサイクル):誕生=>レディ=>実行=>死亡。 誕生 待機 休眠 中断 ブロック start 実行可能 yield dispatch 実行 待機 休眠 中断 ブロック resume スリープ時間が経過 stop 死亡 クラスThreadのメソッド 実行結果 ex2 (The Thread methods) public void start() IllegalThreadStateException runメソッドを起動し、期待された仕事を行う。 public final void stop() SecurityException ThreadDeathオブジェクトを送出することによってスレッドを停止させる。 public final void suspend() スレッドの実行を中断される。 public final void resume() 中断されたスレッドを再開させる。 public static void sleep(long millis) InterruptedException スレッドを眠らせる。 public final void wait() ターゲットオブジェクトを待つためにwaitメソッドを呼び出し、待機状態に入る。 public final void notify() 待ち行列の先頭にあるスレッドが実行可能状態に移る。 IllegalMonitorStateException public final void notifyAll() 待ち行列にあるスレッドがすべて実行可能状態に移る。 public final void setName(String name) スレッドの名前を設定する。 public final String getName() スレッドの名前を返す。 public static Thread currentThread() カレントスレッドへの参照を返す。 public final boolean isAlive() スレッドが生きているかを判断する。 SecurityException public void run() スレッドstart()を呼び出すとき、 run()メソッドを起動します。 スレッドクラスの定義 Definition of a thread class キーワード class スレッドクラス名前 thread_name …… キーワード キーワード extends Thread { // 必要な変数とコンストラクタの宣言 public void run(){ 必ずrun()メソッドの 再定義が必要です。 …… } } スレッド CountTenThreadの 定義 スレッドcttのrunメ ソッドの実行開始 class CountTenThread extends Thread { public void run() { for (int i = 0; i < 10; i++) { System.out.println("run:i = " + i);}} } public class ThreadTest { public static void main(String[] args) { CountTenThread ctt = new CountTenThread(); ctt.start(); for (int i = 0; i < 10; i++) { System.out.println("main:i = " + i);}} } CountTenThreadのスレッド。 runメソッドが終ると消滅。 mainのスレッド CoffeeShop class CoffeeShop class ShopMaster class Counter class CoffeeDrinker itao counter master putCoffee() getCoffee() honkon higashino Output: Master made a COFFEE [Coffee] itao can drink a COFFEE! [] honkon can NOT drink a COFFEE! higashino can NOT drink a COFFEE! Master made a COFFEE [Coffee] honkon can drink a COFFEE! [] higashino can NOT drink a COFFEE! Master made a COFFEE [Coffee] higashino can drink a COFFEE! [] Master made a COFFEE [Coffee] Master made a COFFEE [Coffee, Coffee] honkon can drink a COFFEE! [Coffee] higashino can drink a COFFEE! [] itao can NOT drink a COFFEE! honkon can NOT drink a COFFEE! Master made a COFFEE [Coffee] itao can drink a COFFEE! [] honkon can NOT drink a COFFEE! higashino can NOT drink a COFFEE! Master made a COFFEE [Coffee] Exercise 1 – Thread & Vector • プログラム「CoffeeShop」を改良して、プログラム 「VideoShop」を作る。 • プログラム「VideoShop」は、ビデオのレンタルを仮想的に実 現させる。 • プログラム「VideoShop」は以下の3つのクラスで成り立つ: – VideoShop • mainメソッドを持ち、RackとUserを生成後、Userをスタートさせる。 – Rack • Vectorとしてビデオ郡を保持する。コンストラクタで、適当にビデオを登録 しておく。「借りる」メソッドと「返す」メソッドを提供する。 – User • Threadとして稼動する。乱数によって借りるビデオを決め、Rackから「借 りる」。乱数によって決まった時間分Sleepし、Rackにビデオを「返す」。こ れを繰り返す。 VideoShop class VideoShop class Rack Rack returnVideo() borrowVideo() class User A thread class itao honkon higashino Exercise 1 – Class Diagram has has has Exercise 1 – 実行例 板尾が「スターウォーズ1」を借り ているため、東野は借りれない (waitする)。 板尾が「スターウォーズ1」を返し た(notifyAllしてwaitを解除させ る)。 東野は無事、「スターウォーズ1」 を借りることができた。 VideoShopEx.java
© Copyright 2025 ExpyDoc