(no subject)

Sep 24, 2009 20:01

Под катом программа на Яве. 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");
}
}

Previous post Next post
Up