JavaプログラミングⅠ

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

JavaプログラミングⅠ

JavaプログラミングⅠ

JavaプログラミングⅠ

プログラミングA

JavaプログラミングⅠ

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

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

JavaプログラミングⅠ

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

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

プログラムの基本構成

JavaプログラミングⅠ

JavaプログラミングⅠ

Programming-C-9.key

Prog2_9th

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

メソッドのまとめ

2

2

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Microsoft PowerPoint ppt

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

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

JavaプログラミングⅠ

Prog1_10th

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

Prog1_6th

K227 Java 2

JavaプログラミングⅠ

r1.dvi

オブジェクト指向プログラミング・同演習 5月21日演習課題

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

JavaプログラミングⅠ

Microsoft PowerPoint - prog09.ppt

JavaプログラミングⅠ

Microsoft PowerPoint - prog09.ppt

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

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

JavaプログラミングⅠ

2

デジタル表現論・第6回

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Prog1_15th

Java知識テスト問題

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

PowerPoint プレゼンテーション

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

リファレンス,配列 例外処理

プログラミング基礎I(再)

Microsoft PowerPoint - prog03.ppt

GEC-Java

マークアップ言語

Assignment_.java 0 Assignment_.java 課題 : 台形の面積 / class Assignment_ public static void main(string[] args) throws IOException キーボード準備 int top, bottom,

2

ガイダンス


プログラミング入門1

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

基本情報STEP UP演習Java対策

プログラミング入門1

ガイダンス

PowerPoint Presentation

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

108 頁通過テスト 2. の本文 111 頁紹介文 136 頁練習 5-1 プログラム 136 頁練習 5-1 問 2 末尾に句点追加 158 頁練習問題文 161 頁練習 2-2 コメント文 166 頁練習 3-1 問 1 クラス名を挿入 178 頁通過テスト 3 文字 s を削除 180 頁コ

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

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

Java講座

プログラミング入門1

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

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

Microsoft Word - java a.doc

Prog2_10th

スライド 1

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

デジタル表現論・第4回

ガイダンス

Javaプログラムの実行手順

JavaプログラミングⅠ

プログラミング入門1

2

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

スライド 1

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

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

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

プログラミング入門1

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

JAVA入門

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

226

Prog1_13th

JAVA とテンプレート

PowerPoint プレゼンテーション

< F2D B838A835882CC8CF68EAE2E6A7464>


Transcription:

Java プログラミング Ⅱ 11 回目スレッド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) スレッドは 1 つの実行箇所をもつ一連の処理の流れである (2) マルチスレッドで各スレッドの処理は並行して実行される (3) Java はマルチスレッド処理を記述できない (4) 新たにスレッドを生成する場合 Thread クラスを拡張し かつ Runnable インタフェースを実装する必要がある (5) 新たなスレッドで実行する処理は Thread クラスまたは Runnable インタフェースの run() メソッドをオーバーライドして記述する (6) 複数のスレッドは それを開始した順番に終了する (7) 同期とは 複数のスレッドの処理を互いに排他的に行うことである (8) メソッドの修飾子に synchronized を付加するとそのメソッドの処理は排他的になる 難易度 課題 1 2 n (n=1~30) を順次求めて一覧表示する処理を実行するスレッドを宣言しなさい その後で main() メソッドよりこのスレッドを起動しなさい 実行例 結果をお待ちください (main() メソッドはここで終了します ) 2 の 1 乗は 2 です ( 以後 新しいスレッドによる出力です ) 2 の 2 乗は 4 です 2 の 3 乗は 8 です : 2 の 30 乗は 1073741824 です 2 n を順次求めて表示する処理を実行するスレッドの宣言 class TwoToPowerOf extends Thread{ 2 n (n=1~30) を順次求めて一覧表示する処理を宣言します スレッドを起動する main() メソッド class Assignments11_1{ // 新しいスレッドを起動 TwoToPowerOf ttp=new TwoToPowerOf(); ttp.start(); // メインスレッドはここで終わります System.out.println(" 結果をお待ちください ");

難易度 課題 2 フィボナッチ数列の与えられた項の計算と表示を行うスレッドを宣言しなさい Main() メソッドでキーボードから求めたいフィボナッチ数列の項を入力した後 このスレッドを起動してフィボナッチ数列の該当する項を求めなさい 以下に フィボナッチ数列の与えられた項の計算と表示を行うスレッドの宣言 このスレッドを起動する main() メソッドのコードを示します フィボナッチ数列とは 1, 1, 2, 3, 5, 8, ( 漸化式 )n 1 = 1 n 2 = 1 n k = n k-1 + n k-2 (k 3) フィボナッチ数列の与えられた項の計算と表示を行うスレッドの宣言 class Fibonacci extends Thread{ private int v1=1, v2=0, v3; private int n; // 求めたい項 (1 以上 ) // 求めたい項をコンストラクタで設定します public Fibonacci(int i){ n=i; // フィボナッチ数列の与えられた項を求めます public int getterm(){ for(int i=0;i<n;i++){ v3=v1+v2; v1=v2; v2=v3; return v3; // フィボナッチ数列の与えられた項を求め 表示します フィボナッチ数列の該当する項を計算し 表示するコードを記述してくださいメンバの getterm() をうまく用いましょう スレッドを起動するメインメソッド class Assignment11_2{ // import java.io.*; は忘れずに一番上に書いてください public static void main(string[] args) throws IOException{ InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); System.out.println(" フィボナッチ数列の求めたい項を入力してください "); String str=br.readline(); int n=integer.parseint(str); フィボナッチ数列の該当する項を計算して表示するスレッドを起動します System.out.println(" 結果をお待ちください ");

実行例 フィボナッチ数列の求めたい項を入力してください 30 結果をお待ちください (main() メソッドはここで終了します ) フィボナッチ数列 30 項目は 832040 です ( 新しいスレッドによる出力です ) 難易度 課題 3 銀行口座への操作には 預金や払い戻し 振込みなどがあります 一般に 複数の利用者が同一の口座へ並行してアクセスすることは容易に想定されます 例えば ある預金者 C が本人の口座へ預金を行うのと並行して 他の利用者がその預金者 C の口座へ振り込みを行うなどです このように並行して起こる処理はスレッドを用いると比較的容易に記述できます 次の内容をシミュレーションするコードをスレッドを用いて作成しなさい シミュレーションの内容 : 1) 会社 A がある銀行に口座 a を持つ 2) 会社 A の 3 人の社員が並行して次のように口座 a へ預金と払戻を行う 社員 1 100 万円預金して 75 万円払戻を行う社員 2 20 万円預金して 25 万円払戻を行う社員 3 50 万円預金して 20 万円払戻を行う 3) 銀行は各社員からの処理を整合性を取りながら実行する (synchronized) ヒント ) 教科書 p. 483 の Sample7 車会社と運転手 の例題を参考にしましょう会社クラス 会社 A の銀行口座クラス運転手クラス ( スレッド ) 社員クラス ( スレッド )

難易度 課題 4 次はキーボードから 2 つの整数を入力して加算を実行するスレッドです 加算を実行するスレッドの宣言 import java.io.*; class Addition extends Thread{ int num1=0, num2=0; // キーボードの準備 InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); // 2 つの整数の入力 System.out.println(" 加算 2 つの整数を入力してください "); try{ num1=integer.parseint(br.readline()); num2=integer.parseint(br.readline()); catch(ioexception e){ // 結果出力 System.out.println(num1+"+"+num2+"="+(num1+num2)); この例を参考にして 1. キーボードから数値を入力して なんらかの計算を行い 結果を表示するスレッドを各自宣言しなさい 2. main() メソッドから各自のスレッドを起動しなさい 上の加算を実行するスレッドを起動する main() メソッドと実行例を以下に示します スレッドを起動する main() メソッド class Assignment11_4{ // 新しいスレッドを起動 System.out.println(" スレッドを開始します "); Addition add=new Addition(); add.start(); // メインスレッドはここで終わります System.out.println(" メインメソッドを終了します "); 実行例 スレッドを開始します メインメソッドを終了します (main() メソッドはここで終了します ) 加算 2 つの整数を入力してください ( 新しいスレッドによる出力です ) 3 5 3+5=8

難易度 課題 5 次はタイマーを実行するスレッドです このスレッドを起動する main() メソッドとその実行結果を下に示します 空欄を埋めてスレッドの宣言を完成させてください タイマーを実行するスレッドの宣言 class Timer extends Thread{ // タイマー ( ミリ秒 ) private int timer; // タイマーをコンストラクタで設定 public Timer(int t){ timer=t; // タイマーの実行 指定された時間だけ一時停止するコードを記述してください スレッドを起動する main() メソッド class Assignment11_5{ int timeout=10000; Timer mytimer=new Timer(timeout); mytimer.start(); System.out.println(timeout+" ミリ秒後に自動的に終了します "); 実行結果 10000 ミリ秒後に自動的に終了します (main() メソッドはここで終了します ) 10000 ミリ秒のタイマーを開始しました ( 以後 新しいスレッドによる出力です ) 10000 ミリ秒経過しました (10 秒後に表示されます )

難易度 課題 6 次は与えられた範囲 変数 from から変数 to まで を指定された刻み幅 変数 skip で総計を求めるスレッドです このスレッドを利用して 1~100 までの総計を以下のように分割して複数のスレッドで並列に求めたい メインメソッドの空欄を埋めてください 総計を求めるスレッドの宣言 class Sum extends Thread{ // 総計を求める範囲と刻み幅 private int from; private int to; private int skip; // 総計 private int sum; // 各種値をコンストラクタで設定 public Sum(int f, int t, int s){ from=f; to=t; skip=s; // 総計の計算を実行 sum=0; for(int i=from;i<=to;i+=skip) sum += i; // 総計の取得 public int getsum(){ return sum; 総計の求め方 (1) スレッド 1 1~100 までの偶数の合計を求めますスレッド 2 1~100 までの奇数の合計を求めます (2) それぞれのスレッドの合計を足して 1~100 の総計を表示します スレッドを起動する main() メソッド class Assignment11_6{ 総計の求め方で処理を実行して結果を表示するコードを書いてください 実行結果 偶数の合計 2550 (main() メソッドで結果を表示します ) 奇数の合計 2500 総計 5050