154 Views
January 26, 22
スライド概要
トピックス:Java の標準ライブラリ, 時間, スリープ, 疑似乱数, マルチスレッド, タイマー
Java の基本(スライド資料とプログラム例)(全17回)
https://www.kkaneko.jp/pro/pi/index.html
金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
pi-12. 時間,スリープ, 疑似乱数,タイマー トピックス:Java の標準ライブラリ,時間,ス リープ,疑似乱数,マルチスレッド,タイマー URL: https://www.kkaneko.jp/pro/pi/index.html (Java の基本,スライド資料とプログラム例) 金子邦彦 1
全体まとめ • Java で標準ライブラリには、次のような機能があ る • スレッド • 時間,タイマー • 疑似乱数 • Java で標準ライブラリの機能を使うとき,標準ラ イブラリのクラスを継承して使う場合がある 2
アウトライン 番号 項目 復習 12-1 Java の標準ライブラリ 12-2 時間、スリープ 12-3 スリープに関する演習 12-4 疑似乱数 12-5 マルチスレッド 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 3
Java などのプログラミング言語の体 験,演習ができるオンラインサービス GDB online http://www.pythontutor.com/ オンラインなので、「秘密にしたいプログラム」を 扱うには十分な注意が必要 4
GDB online で Java を動かす手順 ① ウェブブラウザを起動する ② 次の URL を開く https://www.onlinegdb.com 5
③ 「Language」のところで,「Java」を選ぶ 6
④ ソースコードを入れる ⑤ 実行.実行結果を確認 「Run」をクリック. 7
12-1. Java の標準ライブラリ 8
ライブラリ • 複数のプログラムが共有して使 えるような機能を持ったプログ ラムのこと • プログラミング言語処理系に元 から備わっているライブラリの ことを,標準ライブラリという 9
Java の標準ライブラリの機能 • コレクション (ArrayList, HashMap など) • ラッパクラス(Integer, Double など) • 文字列 (String) • その他 • • • • • • 時間,スリープ 疑似乱数 スレッド 標準入出力 数値処理 ファイル読み書き など 10
12-2. 時間,スリープ 11
時間,スリープ • いまの日時(日付、時刻)を知る • 日時に関する計算 • 処理を一定時間止める(タイミング,一定時間ご との監視など) 12
Java での時間,スリープ • いまの日時(日付、時刻)を知る java.time.LocalDateTime.now() • 日時に関する計算 plusHours(1) 1時間後 plusMinutes(1) 1分後 plusSeconds(1) 1秒後 • 処理を一定時間止める(タイミング,一定時間ごとの 監視など) • Thread.sleep(2000) 2秒止まる. 「2000」とあるのはミリ秒単位 13
演習 資料:15 ~ 17 【トピックス】 • 日時に関する計算 • 処理を一定時間止める 14
日時に関する計算 ① 次のソースコードを入れる ② 実行結果の確認 世界標準時が表示される.9時間ずれている. 15
日時に関する計算 ① 次のソースコードを入れる ② 実行結果の確認 16
処理を一定時間止める ① 次のソースコードを入れる ② 実行結果の確認 2秒止まる 「2000」 とあるのは ミリ秒単位 17
12-3. スリープに関する演習 18
Ball クラスのオブジェクト y 属性 x の値を 2 増やし, 属性 y の値を 3 増やすメソッド move x x 19
演習 資料:21 ~ 25 【トピックス】 • スリープ 20
① 次のソースコードを入れる 次のページに続く 21
② 実行結果の確認 動く前は 0 と0.動いた後は 2 と 3. 22
• 10回動かす for 文,メソッド move • 動かす前に1秒止まる Thread.sleep(1000) 23
③ public class Main の中を次のように書き換える 24
④ 実行結果の確認 1つ表示のたびに, 1秒止まる 25
12-4. 疑似乱数 26
疑似乱数とは • 疑似乱数は,コンピュータによって生成されたラ ンダムな数や数の列 • 「乱数」ということもある 疑似乱数 アルゴリズムにより生成される数である.再現が 可能.その意味で「疑似」 27
演習 資料: 29 【トピックス】 • 疑似乱数 28
① 次のソースコードを入れる nextInt(10) は、0から9までの数(10通り)の中から 1つをランダムに得る 実行のたびに 結果は変わる 29
12-5. マルチスレッド 30
スレッド • スレッドとは,処理の流れのこと. • 複数の処理を並行させたいときには,マルチス レッド(複数のスレッド)で処理を行う 31
通常のプログラム実行 (シングルスレッド) マルチスレッド ここではスレッド数は2. (スレッド数は3以上にもできる)32
演習 資料:34 ~ 41 【トピックス】 • マルチスレッド 33
シングルスレッドの例 ① 次のソースコードを入れる Hello を 100回表示.表示のたびに 1秒止まる. 34
② 実行結果の確認 1つ表示のたびに, 1秒止まる 35
マルチスレッドの例 起動 メイン 別スレッド 36
マルチスレッドの例 ③ 前のソースコードは消して,次のソースコードを入れる Java では標準ライブラリのクラス Thread のサブクラスを定義 run メソッドの中に, 別スレッドでの処 理を書く オブジェクトを生成 新しいスレッドを起動 37
④ 実行結果の確認 2秒ごとに Morning を表示 38
マルチスレッドの例 起動 メイン 別スレッド 別スレッド 39
マルチスレッドの例 ⑤ 前のソースコードに書き加える 40
⑥ 実行結果の確認 2秒ごとに Morning を表示 3秒ごとに Hello を表示 41
関連ページ • Java プログラミング入門 GDB online を使用 https://www.kkaneko.jp/pro/ji/index.html • Java の基本 Java Tutor, GDB online を使用 https://www.kkaneko.jp/pro/pi/index.html • Java プログラム例 https://www.kkaneko.jp/pro/java/index.html 42
12-1
class Student {
String id;
String name;
String address;
public Student(String id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public void printout() {
System.out.printf("%s %s %s", this.id, this.name, this.address);
}
};
public class Main
{
public static void main(String[] args) {
Student k = new Student("t001", "kaneko", "matsunaga");
k.printout();
}
}
43
12-2 public class Main { public static void main(String[] args) { java.time.LocalDateTime d; d = java.time.LocalDateTime.now(); System.out.println(d); } } ----------------------public class Main { public static void main(String[] args) { java.time.LocalDateTime d; d = java.time.LocalDateTime.now(); System.out.println(d); System.out.println(d.plusHours(1)); System.out.println(d.plusMinutes(1)); System.out.println(d.plusSeconds(1)); } } ----------------------public class Main { public static void main(String[] args) { java.time.LocalDateTime d; d = java.time.LocalDateTime.now(); System.out.println(d); try { Thread.sleep(2000); } d = java.time.LocalDateTime.now(); System.out.println(d); } } 44
12-3
class Ball {
double x;
double y;
public Ball(double x, double y) {
this.x = x;
this.y = y;
}
public void move() {
this.x = this.x + 2;
this.y = this.y + 3;
}
public void printout() {
System.out.printf("%f %f\n", this.x, this.y);
}
};
public class Main
{
public static void main(String[] args) {
Ball b = new Ball(0, 0);
k.printout();
}
}
-----------------------------class Ball {
double x;
double y;
public Ball(double x, double y) {
this.x = x;
this.y = y;
}
public void move() {
this.x = this.x + 2;
this.y = this.y + 3;
}
public void printout() {
System.out.printf("%f %f\n", this.x, this.y);
}
};
public class Main
{
public static void main(String[] args) {
Ball b = new Ball(0, 0);
b.printout();
for(int i = 1; i <= 10; i++) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
b.move();
b.printout();
}
}
}
45
12-4 public class Main { public static void main(String[] args) { int a; java.util.Random r = new java.util.Random(); a = r.nextInt(10); System.out.println(a); } } 46
12-5
class Morning extends Thread {
public void run() {
for(int i = 0; i < 50; i++) {
try {
Thread.sleep(2000);
} catch(InterruptedException e) {}
System.out.println("Morning");
}
}
}
public class Main
{
public static void main(String[] args) {
Morning m = new Morning();
m.start();
}
}
47
12-5
class Morning extends Thread {
public void run() {
for(int i = 0; i < 50; i++) {
try {
Thread.sleep(2000);
} catch(InterruptedException e) {}
System.out.println("Morning");
}
}
}
class Hello extends Thread {
public void run() {
for(int i = 0; i < 50; i++) {
try {
Thread.sleep(3000);
} catch(InterruptedException e) {}
System.out.println("Hello");
}
}
}
public class Main
{
public static void main(String[] args) {
Morning m = new Morning();
m.start();
Hello h = new Hello();
h.start();
}
}
48