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

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

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

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

Q&A

解決済

3回答

1279閲覧

Threadを使用したプログラム

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2017/01/09 06:19

編集2017/01/09 10:35

Thread

lang

1public void run(){ 2k

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

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

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

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

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

yohhoy

2017/01/09 06:37

掲示ソースコードは正常動作するように見えます(手元でも期待通り動きます)。実際にエラーを再現できますか?
退会済みユーザー

退会済みユーザー

2017/01/09 07:47

今実行したところTesting Gate, hit CTRL+C toexit.Alice : START!Bobby : START!Chis : START!David : START!と表示され、以降動かなくなりました。
退会済みユーザー

退会済みユーザー

2017/01/09 07:49

今までは***** Error! *****No.カウント:Alice,Alaska等無限に繰り返して表示されていました。
退会済みユーザー

退会済みユーザー

2017/01/09 08:28

それは、動かないというより、このコードには通過した時に通過した人間の情報を表示する機能がないからです プログラム内部では通過し続けています 実際表示機能をつけると表示され続けます
退会済みユーザー

退会済みユーザー

2017/01/09 09:41

正常時の表示機能がないってことですか。通過時の表示ってことはGateクラスに書けばいいんですかね。
guest

回答3

0

とりあえずこれが原因かわかりませんが(一応正しいThreadの実装を書いておきます)

Threadはこのように作成します。

Java

1Thread thread = new Thread(Runnable r);

この Runnable はインターフェイスで、実際はこれを実装したクラスを渡します。
Runnable は public void run() の実装を要求します。

Thread を拡張して public void run() を書いているので、おそらく勘違いしているものと思われます。

実装例)

Java

1class MyRunnable implements Runnable { 2 @Override 3 public void run() { 4 // ここにスレッドの動作を記述 5 } 6} 7 8public class Test { 9 public static void main(String[] args) { 10 MyRunnable my_runnble = new MyRunnable(); 11 12 Thread thread = new Thread(my_runnble); 13 thread.start(); 14 } 15}

このために、質問にあるコードでは

一般的なRunnableの実装では匿名クラスやラムダ式を使うことが多いです、今回はわかりやすいように離して記述しました。

補足:
Runnable は Thread と同じく java.lang パッケージですので、新たに import する必要はありません。

投稿2017/01/09 06:50

編集2017/01/09 06:57
Zooey

総合スコア55

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

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

swordone

2017/01/09 07:17

Threadの作り方はなんら問題ありませんよ。
Zooey

2017/01/09 08:24

うわ...Threadでこういう方法もあったのですね。ご指摘ありがとうございます。ずっとThreadはRunnableと併用して用いるものだと思っていました。無知をさらけ出してしまいました...私まだこのようなサイトで質問に答える資格ないですね、もっと勉強してきます。このような誤った回答をしてしまい質問者様にもこの場を借りて謝罪いたします。
yohhoy

2017/01/09 10:08 編集

FYI: "extends Thread" と "implements Runnable" はどちらも正しいスレッドの使い方ですね。Zooeyさんが仰るように一般的にはRunnable実装方式の方が好まれますし、オブジェクト指向的にもその方が設計上は良いケースが多いと思います。(ケースバイケースですから、Thread継承方式がダメという気はないです。結果的に、今回の質問には無関係でしたが。) http://stackoverflow.com/questions/15471432/why-implements-runnable-is-preferred-over-extends-thread
guest

0

ベストアンサー

かいけつしました。皆さんありがとうございます。

投稿2017/01/09 09:49

編集2017/01/09 10:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

コードにはcheckメソッドでエラーメッセージが表示される原因になる点はないと思います。何かケアレスミス(実際に動かしたときのコードが上のコードと違っているなど)があるのでは?

投稿2017/01/09 06:42

KSwordOfHaste

総合スコア18394

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

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

KSwordOfHaste

2017/01/09 08:10

質問文のコメントに追加された内容を拝見する限りIDEのなんらかの不整合やコンパイル漏れでコンパイルが完全に行えていないことが原因のように思えました。 > START!と表示され、以降動かなくなりました。 これは正常動作です。無限ループして4人がGateをいったりきたりしてます。きっとw;
退会済みユーザー

退会済みユーザー

2017/01/09 08:20

なるほど。コンパイルされていない部分があるかもしれないということですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問