Re: Threads interruption
Last question: how to stop parent thread? i stopped all of 4 children
threads, but don't know how to stop parent... why my method doesn't
work?
import java.io.*;
public class Th extends Thread
{
private int which;
private static int[] howMany = {0, 0, 0, 0} ;
static boolean[] end = {true,true};
public Th(int which)
{
this.which= which;
}
public void run()
{
switch (which)
{
case 1: ThA(); break;
case 2: ThB(); break;
case 3: ThC(); break;
case 4: ThD(); break;
}
}
public void ThA()
{
while(end[0])
{
synchronized(howMany)
{
if ( (howMany[0]+howMany[1]) < (howMany[2]+howMany[3]) &&
(howMany[0] <= 2*howMany[1]))
{
System.out.print("A");
howMany[0]++;
}
}
try
{
sleep(50);
}
catch(InterruptedException e) {}
}
}
public void ThB()
{
while(end[0])
{
synchronized(howMany)
{
if ( (howMany[0]+howMany[1]) < (howMany[2]+howMany[3]) )
{
System.out.print("B");
howMany[1]++;
}
}
try
{
sleep(3200);
}
catch(InterruptedException e) {}
}
}
public void ThC()
{
while(end[1])
{
synchronized(howMany)
{
System.out.print("C");
howMany[2]++;
try
{
howMany.wait();
}
catch(InterruptedException e) {}
}
try {
sleep(100);
}
catch(InterruptedException e) {}
}
}
public void ThD()
{
while(end[1])
{
synchronized(howMany)
{
System.out.print("D");
howMany[3]++;
try {
howMany.notify();
}
catch(IllegalMonitorStateException e) {}
}
try {
sleep(1000);
}catch(InterruptedException e) {}
}
}
public static void main(String[] args)
{
Klawiatura k = new Klawiatura();
k.start();
}
}
class Klawiatura extends Thread
{
int n;
static boolean[] t = {true,true};
static void ustaw(int k)
{
switch (k)
{
case 0:
Th.end[0] = false;
t[0] = false;
break;
case 1:
Th.end[1] = false;
t[1]=false;
break;
case 2:
Th.end[0] = false;
Th.end[1] = false;
t[0]=false;
t[1]=false;
break;
}
}
public void run()
{
BufferedReader i = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("podaj liczbe\n1 - Koniec A, B\n2 - Koniec C D\n3
- Koniec wszystkie: ");
Th Th1 = new Th(1);
Th Th2 = new Th(2);
Th Th3 = new Th(3);
Th Th4 = new Th(4);
Th1.start();
Th2.start();
Th3.start();
Th4.start();
while(t[0] || t[1])
{
try
{
sleep(50);
n = i.read();
switch (n)
{
case 49:
{
ustaw(0);
System.out.println("\nWatki 1, 2: STOP");
break;
}
case 50:
{
ustaw(1);
System.out.println("\nWatki 3, 4: STOP");
break;
}
case 51:
{
System.out.println("\nWatki 1,2,3,4: STOP");
ustaw(0);
ustaw(1);
break;
}
}
}
catch(IOException e) {}
catch(InterruptedException e){}
for (int j=0;j<2;j++)
System.out.println("T["+j+"] = "+t[j]);
}
}
}