2 つのスレッドを並行して実行する必要があります。
1) 1 から 100 までの素数を計算する PrimeThread。2) 1 から 100 までの偶数を計算する evenThread。
素数と偶数のロジックを実装しました。それに集中しないでください。私の質問は、
次の方法で数字を印刷したい。10個の素数 10個の偶数 10個の素数 10個の偶数とそれらの残り。
それは可能ですか?
sleep() メソッドを使用しましたが、機能しません。私を助けてください。ありがとう。
2 つのスレッドを並行して実行する必要があります。
1) 1 から 100 までの素数を計算する PrimeThread。2) 1 から 100 までの偶数を計算する evenThread。
素数と偶数のロジックを実装しました。それに集中しないでください。私の質問は、
次の方法で数字を印刷したい。10個の素数 10個の偶数 10個の素数 10個の偶数とそれらの残り。
それは可能ですか?
sleep() メソッドを使用しましたが、機能しません。私を助けてください。ありがとう。
2 つのスレッドを並行して実行する必要があります。
[...]
次の方法で数字を印刷したい。10個の素数 10個の偶数 10個の素数 10個の偶数とそれらの残り。
これは矛盾しているように思えます: あなたが望む出力は、あなたが本当に望むのは、タスクを順番に実行することですが、インターリーブされた方法で実行することです. printNextPrimes(int number)
2 つのメソッドを作成printNextEvens(int number)
して、それらを 1 つのスレッド ループで呼び出してみませんか。
for (int i = 0; i < 10; i++) {
printNextPrimes(10);
printNextEvens(10);
}
このようなもの:
public class Test {
static Object lock = new Object();
static boolean printPrime = true;
static boolean printEven;
static class PrimeTread extends Thread {
public void run() {
int n = 0;
while (n < 100) {
synchronized (lock) {
if (printPrime) {
for (int i = 0; i < 10; i++) {
System.out.println(nextPrime());
n++;
}
printPrime = false;
printEven = true;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
private int nextPrime() {
return 31;
}
}
static class EvenTread extends Thread {
public void run() {
int n = 0;
while (n < 100) {
synchronized (lock) {
if (printEven) {
for (int i = 0; i < 10; i++) {
System.out.println(nextEven());
n++;
}
printPrime = true;
printEven = false;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
private int nextEven() {
return 2;
}
}
public static void main(String[] args) {
new EvenTread().start();
new PrimeTread().start();
}
}
この例を見てください。同期方法でスレッドを使用する方法を示しています...
これで、「A、A、A、.....B、B、B....C、C、C」と「C、B、A、B、C、A」の代わりに「C、B、A、B、C、A」を印刷します。 、B」など...
//Use of synchronize
class A
{
char c[] = {'A', 'B', 'C'};
synchronized void show (int index)
{
try
{
for(int i=0; i<3; i++)
{
System.out.println(c[index]);
Thread.sleep(1000);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
class B extends Thread
{
int index;
A ob1;
void set (int i)
{
index =i;
}
public void run()
{
ob1.show(index);
}
public static void main (String[] args)
{
A ob2 = new A ();
B b1 = new B ();
B b2 = new B ();
B b3 = new B ();
b1.set(0);
b2.set(1);
b3.set(2);
b1.ob1 = ob2;
b2.ob1 = ob2;
b3.ob1 = ob2;
b1.start();
b2.start();
b3.start();
}
}
この例があなたの質問に非常に似ているので、この例が役立つことを願っています...
セマフォを探しているようです
各スレッドには独自のセマフォがあります。10 個の番号を出力した後、他のスレッドが所有していたセマフォを解放し、自身のセマフォを取得します。これにより、他のスレッドが再び開始され、そのスレッドが再び解放されるまでブロックされます。