質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3118閲覧

JavaのThreadクラスのSleep処理について

a-takahashi

総合スコア48

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/04/18 02:30

javaのThreadクラスにスレッドに一時停止を行うためのSleepメソッドがあると思うのですが、
Sleepメソッドがstaticメソッドなのになんだか違和感を感じます。

下記のコードのように、Threadクラスを継承したクラスのオブジェクトが2つある場合、
Sleepメソッドを呼び出した場合、thread1Aとthread1B、両方のスレッドがとまることになると思うのです。
どちらか片方のスレッドだけ停止させたいときもあると思うので、なんとなくですがインスタンスメソッドであるほうが自然な気がします。
こんなつくりになっているのは何か理由があるのでしょうか?

Threadについて理解が乏しいので質問がわかりにくかったら申し訳ありません。
よろしくお願いします。

java

1public class MainClass { 2 public static void main(String args[]){ 3 System.out.println("Start"); 4 5 Thread_1 thread1A = new Thread_1(1,"ThreadA"); 6 Thread_1 thread1B = new Thread_1(2,"ThreadB"); 7 8 thread1A.start(); 9 thread1B.start(); 10 11 System.out.println("End"); 12 } 13} 14

java

1public class Thread_1 extends Thread { 2 3 private int id; 4 private String name; 5 6 public Thread_1() { 7 } 8 9 public Thread_1(int id, String name) { 10 this.id = id; 11 this.name = name; 12 } 13 14 @Override 15 public void run() { 16 System.out.println(this.name + ":run"); 17 try { 18 System.out.println(this.name + ":sleep"); 19 /*たとえば"ThreadA"だけSpeepしたいときはこんな感じで記述できればいいと 20 思ったのですがエラーになりますよね*/ 21// if(this.name.equals("ThreadA")){ 22// this.sleep(1000); 23// } 24 Thread.sleep(1000); 25 } catch (InterruptedException e) { 26 e.printStackTrace(); 27 } 28 System.out.println(this.name + ":end"); 29 } 30 31}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

いえ、Thread.sleep()を実行したスレッドだけがスリープ状態となります。条件分岐をかけた上でThread.sleep()を実行すれば、条件に当てはまる方だけスリープします。

投稿2016/04/18 02:57

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a-takahashi

2016/04/18 02:59

勘違いしていたようでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問