Тупой вопрос: Java и Threads
У потоков Thread надо вызывать не run а start. Закончить Thread ты можешь, вызвав для него метод interrupt и поймав соотв. исключение.
Thr1.run;
....
Thr1.IsExit = true;
class thread1 extends Thread
{
thread1 (int i) {}
public bool IsExit = false;
public void run { while (!isExit) {}; }
}
точна
Плин, ответы не помогли - немного не то что надо.
Попробую по другому сформулировать: имеется класс. Объект класса создает два потока. Если один из потоков завершил работу, то второй поток надо завершить, а объект замочить. Вопрос - как такое провернуть?
Если бы объект был бы один, то можно было бы через переменную типа static для класса сделать, напр. как ниже
import java.io.*;
import java.util.*;
import java.lang.Integer;
public class MyThreads {
public static boolean Ind = true;
public static void main( String arg[]) throws IOException {
thread1 Thr1 = new thread1;
thread2 Thr2 = new thread2;
Thr1.start;
Thr2.start;
} //end of main
}
class thread1 extends Thread {
public void run {
int i = 0;
while (MyThreads.Ind==true) {i++;System.out.println("CurrPos... "+i);};
System.out.println("Thread1 terminate... "+i);
}
}
class thread2 extends Thread {
public void run {
MyThreads.Ind = false;
System.out.println("Thread2 terminate...");
}
}
Чего мудришь, проверяй thread.isAlive или сделай схему из wait-notify.
Код можешь привести? Я же написал с Java мало знаком - тока начинаю...
Странное техническое решение. Зачем это надо? Может, есть более гибкое и красивое?
public class MainClass
{
public static final Object aThreadTerminated = new Object;
boolean th1Terminated = false;
boolean th2Terminated = false;
class Th1 extends Thread
{
public void run
{
System.out.println("Th1: Hello, world!");
try
{
while (true)
{
sleep(2000);
System.out.println("Th1: Hello, world! x2");
}
}
catch(InterruptedException e)
{
System.out.println("Interrupted, bailing out.");
}
finally
{
synchronized(aThreadTerminated)
{
th1Terminated = true;
aThreadTerminated.notify;
}
}
}
}
class Th2 extends Thread
{
public void run
{
try
{
System.out.println("Th2: Hello, world!");
sleep(6500);
}
catch(InterruptedException e)
{
}
finally
{
synchronized(aThreadTerminated)
{
th2Terminated = true;
aThreadTerminated.notify;
}
}
}
}
void runTest
{
Th1 th1 = new Th1;
th1.start;
Th2 th2 = new Th2;
th2.start;
try
{
synchronized(aThreadTerminated)
{
while (true)
{
aThreadTerminated.wait;
if (th2Terminated)
{
System.out.println("MainClass: got notify from Th2");
th1.interrupt;
}
if (th1Terminated)
{
System.out.println("MainClass: got notify from Th1");
break;
}
}
}
}
catch (Exception e)
{
}
}
static public void main(String args[])
{
MainClass mainClass = new MainClass;
mainClass.runTest;
}
}
Гы-гы, как смог так и придумал Ща буду твое смотреть
Ну ты скажи, какую задачу решаешь. Может, есть уже что-то готовое для этого?
Я учусь
Кто же учится с тредов? Треды - это вообще отдельная тема.
Гы-гы, а еще пользуюсь сокетами и планирую JDBC
Ну если ты это всё делаешь, как эти треды, то мне жаль заказчика/потребителя.
Для заказчика это слишком жестко
Оставить комментарий
0000
Вопрос - как завершить Thr1, когда завершиться Thr2 (сразу и завершается)? Что в код надо добавить и как это сделать правильно с идеологической точки зрения (с потоками и с Java мало знаком, так что ногами не бейте )?