226

Similar documents
ALG ppt

untitled

6 p.1 6 Java GUI GUI paintcomponent GUI mouseclicked, keypressed, actionperformed mouseclicked paintcomponent thread, 1 GUI 6.0.2, mutlithread C

Thread

Java演習(4) -- 変数と型 --

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

新・明解Java入門

< F2D834F838C A815B A CC>

< F2D B838A835882CC8CF68EAE2E6A7464>

ALG ppt

Programming-C-9.key

9.3 同期 共有データへの読み書きの同期 複数のスレッドから共有データを読み書きするときに発生する問題について 一つのフィールドに対して複数のスレッドが同時にアクセスする可能性がある場合 その順番によっては整合性が保てなくなる可能性があるので スレッドの制御フローが独立していては困ることがある 次

基本情報STEP UP演習Java対策

問題1 以下に示すプログラムは、次の処理をするプログラムである

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

Microsoft PowerPoint ppt

K227 Java 2

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

I java A

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

2

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

IE6 2 BMI chapter1 Java 6 chapter2 Java 7 chapter3 for if 8 chapter4 : BMI 9 chapter5 Java GUI 10 chapter6 11 chapter7 BMI 12 chap

解きながら学ぶJava入門編

例外(exception)とは何か

< F2D82B682E182F182AF82F12E6A7464>

問題1 以下に示すプログラムは、次の処理をするプログラムである

< F2D92DE82E8914B82CC977088D32E6A7464>

A B 1: Ex. MPICH-G2 C.f. NXProxy [Tanaka] 2:

アルゴリズムとデータ構造1

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

I. (i) Java? (A). 2Apples (B). Vitamin-C (C). Peach21 (D). Pine_Apple (ii) Java? (A). Java (B). Java (C). Java (D). JavaScript Java JavaScript Java (i

< F2D F B834E2E6A7464>

: : : TSTank 2


< F2D825282CC947B909482CC A815B83682E6A>

vol.30.}...`.X...b.h

< F2D8EA CE909482CC92EA82852E6A7464>

< F2D82518CC282CC D2E6A7464>

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

Microsoft Word - NonGenList.doc

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

JAVA H13 OISA JAVA 1

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a

text_10.dvi

10K pdf

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

JavaプログラミングⅠ

アプレットの作成

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

PowerPoint Presentation

** 平成 16 年度 FE 午後問題 Java** 示現塾プロジェクトマネージャ テクニカルエンジニア ( ネットワーク ) など各種セミナーを開催中!! 開催日 受講料 カリキュラム等 詳しくは 今すぐアクセス!! 平成 16

IT プロジェクト

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

( ) p.1 x y y = ( x ) 1 γ γ = filtergamma.java import java.applet.*; public class filtergamma extends Applet{ Image img; Image new_img; publi

Microsoft Word - keisankigairon.ch doc

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

I HTML HashMap (i) (ii) :.java import java.net.*; import java.io.*; import java.util.hashmap; public class SimpleStopWatch { public static voi

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測



JavaプログラミングⅠ

JavaプログラミングⅠ

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

DVIOUT-exer

JAVA とテンプレート

untitled

ALG ppt

oop1

8 if switch for while do while 2

r1.dvi

Prog2_9th

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

tkk0408nari

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Microsoft Word - NonGenTree.doc

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

明解Javaによるアルゴリズムとデータ構造

(Eclipse\202\305\212w\202\324Java2\215\374.pdf)

Java演習(2) -- 簡単なプログラム --

データ構造とアルゴリズム論

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

明解Javaによるアルゴリズムとデータ構造

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

r02.dvi

ohp02.dvi

ValueHolder... 9 Customer.java Oracle TopLink 10g(10.1.3) È Volume3 2

II Java :30 12:00 I. I IV II. III. IV. ( a d) V. : this==null, T == N A ActionListener C class D actionperformed G getsource I implements K

JAVA入門

untitled

< F2D BCA82CC978E89BA82CC8EC08CB12E6A7464>

参考 - メインスレッドは JVM によって自動的に起動されるため 起動するコードを書く必要 はありません 今まで例題 演習で作成してきたプログラムは全てメインメソッドにて 動作している シングルスレッドです マルチスレッドマルチスレッドとは名前のとおり複数のスレッドと言う意味です マルチスレッドは

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

:30 12:00 I. I VII II. III. IV. ( a d) V. VI : this==null, T == N A ActionListener A addactionlistener C class D actionperformed

PowerPoint プレゼンテーション

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

新・明解Javaで学ぶアルゴリズムとデータ構造

Transcription:

226

227 Main ClientThread Request Channel WorkerThread Channel startworkers takerequest requestqueue threadpool WorkerThread channel run Request tostring execute name number ClientThread channel random run ClientThreadChannel ChannelWorkerThread Channel Channel

228 :ClientThread :Channel :WorkerThread Request new :Request Request takerequest Request Request Request execute execute Main Channel ClientThreadAliceBobbyChris public class Main { public static void main(string[] args) { Channel channel = new Channel(5); // channel.startworkers(); new ClientThread("Alice", channel).start(); new ClientThread("Bobby", channel).start(); new ClientThread("Chris", channel).start();

229 ClientThread Request Channel sleep import java.util.random; public class ClientThread extends Thread { private final Channel channel; private static final Random random = new Random(); public ClientThread(String name, Channel channel) { super(name); this.channel = channel; public void run() { try { for (int i = 0; true; i++) { Request request = new Request(getName(), i); channel.(request); Thread.sleep(random.nextInt(1000)); catch (InterruptedException e) { Request namenumber namealicebobbychris number...execute

230 sleep import java.util.random; public class Request { private final String name; // private final int number; // private static final Random random = new Random(); public Request(String name, int number) { this.name = name; this.number = number; public void execute() { System.out.println(Thread.currentThread().getName() + " executes " + this); try { Thread.sleep(random.nextInt(1000)); catch (InterruptedException e) { public String tostring() { return "[ Request from " + name + " No." + number + " ]"; Channel ChannelrequestQueue takerequest takerequest ChannelthreadPool threadpoolworkerthread threadpoolworkerthread

231 MAX_REQUEST Worker-0Worker-1Worker-2... startworkers public class Channel { private static final int MAX_REQUEST = 100; private final Request[] requestqueue; private int tail; // private int head; // takerequest private int count; // Request private final WorkerThread[] threadpool; public Channel(int threads) { this.requestqueue = new Request[MAX_REQUEST]; this.head = 0; this.tail = 0; this.count = 0; threadpool = new WorkerThread[threads]; for (int i = 0; i < threadpool.length; i++) { threadpool[i] = new WorkerThread("Worker-" + i, this); public void startworkers() { for (int i = 0; i < threadpool.length; i++) { threadpool[i].start(); public synchronized void (Request request) { while (count >= requestqueue.length) { try { wait(); catch (InterruptedException e) { requestqueue[tail] = request; tail = (tail + 1) % requestqueue.length; count++; notifyall();

232 public synchronized Request takerequest() { while (count <= 0) { try { wait(); catch (InterruptedException e) { Request request = requestqueue[head]; head = (head + 1) % requestqueue.length; count--; notifyall(); return request; WorkerThread ChanneltakeRequestRequest execute Request execute WorkerThread ChannelchannelWorkerThread WorkerThread Requestexecute

233 public class WorkerThread extends Thread { private final Channel channel; public WorkerThread(String name, Channel channel) { super(name); this.channel = channel; public void run() { while (true) { Request request = channel.takerequest(); request.execute(); Worker-0Worker-4 WorkerThreadAliceBobbyChris ClientThread ClientThreadWorkerThread AliceNo.0Worker-0 AliceNo.1Worker-3 No.2Worker-2 Worker-0 executes [ Request from Alice No.0 ] Worker-1 executes [ Request from Bobby No.0 ] Worker-2 executes [ Request from Chris No.0 ] Worker-3 executes [ Request from Alice No.1 ] Worker-4 executes [ Request from Bobby No.1 ] Worker-1 executes [ Request from Chris No.1 ] Worker-1 executes [ Request from Bobby No.2 ] Worker-2 executes [ Request from Alice No.2 ]

234 ClientThread Channel WorkerThread Request

235 channel Client Channel requestqueue threadpool takerequest Worker channel Request argumenta argumentb execute Request Channel Request execute :Client :Channel :Worker :Request :Request :Request takerequest :Request execute