Конечно, вот обновленная версия кода:
Tread1 Thread1 Extens {
общественный статический летучий длинный i = 0;
@Override
public void run () {
while (true) {
i ++;
System.out.println (i);
пытаться {
Thread.sleep (1000);
} catch (прерванная экспрессия e) {
// бросить новое runtimeexception (e);
}
}
}
}
Class Thread2 Extends Thread {
общественный статический летучий длинный i = thread1.i;
@Override
public void run () {
while (true) {
я--;
System.out.println (i);
пытаться {
Thread.sleep (1000);
} catch (прерванная экспрессия e) {
// бросить новое runtimeexception (e);
}
}
}
}
класс Main {
public static void main (string [] args) {
Thread1 Thread1 = New Thread1 ();
Thread2 Thread2 = new Thread2 ();
Thread1.start ();
Thread2.start ();
}
}
В исходном коде было несколько синтаксисов и орфографических ошибок. Я исправил их, а также добавил ключевое слово volatile 'к общей переменной i', чтобы убедиться, что изменения, внесенные одним потоком, видны другой.
класс Thread1.java
public class Thread1 extends Thread{
public static long i = 0;
@Override
public void run(){
while(true){
i++;
System.out.println(i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//throw new RuntimeException(e);
}
}}
}
Thread2.java
public class Thread2 extends Thread {
public static long i = Thread1.i;
@Override
public void run() {
while (true){
i--;
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//throw new RuntimeException(e);
}
}}
}
main
public class Main {
public static void main(String[] args) {
Thread1 thread1 = new Thread1();
Thread2 thread2 = new Thread2();
thread1.start();
thread2.start();
}
}