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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

3310閲覧

javaのclassをまとめたい

ya-ya-ya

総合スコア13

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/04/20 01:27

###質問内容
eclipseを使用してjavaのマルチスレッド(3つ)を作る課題をやっているんですが,現段階ではスレッドごとにクラスを作り処理を行っています。
最終的には一つのクラスの中で処理を行いたいんですが、どのようにしたらいいのかわかりません。
どのようにしたらよいでしょうか教えてください。

###該当のソースコード
public class multiThread {

public static void main(String args[]){ SubThread1 sub = new SubThread1(); SubThread2 sub2 = new SubThread2(); sub.start(); sub2.start(); for (int i = 0 ; i < 100 ; i++){ System.out.println("Hello world"); try{ Thread.sleep(100); }catch(InterruptedException e){ } } }

}

class SubThread1 extends Thread{
public void run(){
for (int i = 0 ; i < 100 ; i++){
System.out.println("Hello world1");
try{
Thread.sleep(100);
}catch(InterruptedException e){
}
}
}
}

class SubThread2 extends Thread{
public void run(){
for (int i = 0 ; i < 100 ; i++){
System.out.println("Hello world2");
try{
Thread.sleep(100);
}catch(InterruptedException e){
}
}
}
}

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

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

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

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

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

guest

回答3

0

あんまりよろしくないコードですが、こんな書き方も出来ます。

Java

1public class multiThread { 2 3 public static void main(String args[]){ 4 // Thread(Runnable target)のコンストラクタに、 5 // Runnableを実装した内部無名クラスを指定して生成 6 Thread sub1 = new Thread(new Runnable() { 7 @Override 8 public void run() { 9 System.out.println("Hello world1"); 10 try{ 11 Thread.sleep(100); 12 }catch(InterruptedException e){ 13 } 14 } 15 }); 16 17 // Threadを継承した無名内部クラスを生成 18 Thread sub2 = new Thread(){ 19 @Override 20 public void run() { 21 System.out.println("Hello world2"); 22 try{ 23 Thread.sleep(100); 24 }catch(InterruptedException e){ 25 } 26 } 27 }; 28 29 sub.start(); 30 sub2.start(); 31 32 for (int i = 0 ; i < 100 ; i++){ 33 System.out.println("Hello world"); 34 try{ 35 Thread.sleep(100); 36 }catch(InterruptedException e){ 37 } 38 } 39 } 40}

投稿2016/04/20 02:06

abs123

総合スコア1280

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

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

0

ベストアンサー

たとえばこうですか?

java

1public class MultiThread extends Thread{ 2 3 // static section 4 5 public static void main(String args[]){ 6 MultiThread sub = new MultiThread("Hello world1", 80); 7 MultiThread sub2 = new MultiThread("Hello world2", 90); 8 sub.start(); 9 sub2.start(); 10 for (int i = 0 ; i < 100 ; i++){ 11 System.out.println("Hello world"); 12 try{ 13 Thread.sleep(100); 14 }catch(InterruptedException e){ 15 } 16 } 17 } 18 19 // instance section 20 21 private String message = "Hello World"; 22 private int millisecond = 100; 23 24 private MultiThread(String message, millisecond){ 25 this.message = message; 26 this.millisecond = millisecond 27 } 28 29 @Override 30 public void run(){ 31 for (int i = 0 ; i < 100 ; i++){ 32 System.out.println(this.message); 33 try{ 34 Thread.sleep(this.millisecond); 35 }catch(InterruptedException e){ 36 } 37 } 38 } 39} 40

投稿2016/04/20 01:40

tkturbo

総合スコア5572

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

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

ya-ya-ya

2016/04/20 01:56

このソースはどのような処理をしているのでしょうか? まったくjavaを扱ったことがないので、理解できなくて申し訳ありません。
swordone

2016/04/20 02:00

別クラスに分けていたものを「自分自身」に定義して、表示する文字列、空ける時間間隔を変更できるようにしただけのものですね。 mainメソッドはただのプログラムのスタート地点なので、mainメソッドと通常のインスタンスの記述が共存しても問題ないのです。
tkturbo

2016/04/20 02:09

「まったくjavaを扱ったことがないので」←とりあえず、Threadプログラミングは初心者向きとは言えないので、もっと簡単なところから始めたほうがいいですよ > ya-ya-yaさん
ya-ya-ya

2016/04/20 02:13

課題として与えられているのでやらないといけない状況なんです。。。。
tonarino210

2016/04/20 02:21

Threadの前に「クラス」「オブジェクト」「インスタンス」等について調べてみてください。 tkturboさんのソースが理解できるようになると思います。
ya-ya-ya

2016/04/20 02:26

一度調べてみます
guest

0

1個のクラスで違うスレッドに作業をさせるなら、
SubThreadクラスをnewする時に異なるインスタンスフィールドを持たせて
runメソッド内でif文で分岐するしか思いつかないですね。

普通にやれば、
SubThreadをnewする時に引数ありコンストラクタを使うことになりますが。

java

1import java.io.InputStreamReader; 2import java.util.Scanner; 3 4public class Exec { 5 6 public static boolean button; 7 8 public static void main(String[] args) throws Exception { 9 SubThread thread1 = new SubThread(true); 10 SubThread thread2 = new SubThread(false); 11 thread1.start(); 12 thread2.start(); 13 while(true){ 14 new Scanner(new InputStreamReader(System.in)).nextLine(); //Enter入力で抜ける 15 button = !button; 16 } 17 } 18} 19 20class SubThread extends Thread{ 21 22 private boolean button; 23 24 public SubThread(boolean button){ 25 this.button = button; 26 } 27 28 @Override 29 public void run(){ 30 while(true){ 31 if(Exec.button == button){ 32 System.out.println(button); 33 } 34 } 35 } 36}

投稿2016/04/20 02:55

uniuni

総合スコア57

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問