Под катом программа на Яве. multithreading.
volatile там нафиг не нужен, лень убирать.
Кто может объяснить, почему она работает именно так, как работает?
В спеке и жавадоке не нашел.
package ru.srez.example;
public class Main {
private volatile Thread t1 = new Thread(new Runnable(){
public void run() {
func1();
}});
private volatile Thread t2 = new Thread(new Runnable(){
public void run() {
func2();
}});
public static void main(String[] args) throws InterruptedException {
Main m = new Main();
}
public Main() {
t1.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2.start();
}
public synchronized void func1() {
try {
wait();
System.out.println("m1");
} catch (InterruptedException e) {
System.out.println("m2");
}
}
public synchronized void func2() {
System.out.println("m3");
//notify();
t1.interrupt();
System.out.println("m4");
}
}