import java.awt.AWTException;
import java.awt.Robot;
public class TestThread1 implements Runnable {
private static String name;
public TestThread1(String name){
this.name=name;
}
@Override
public void run() {
synchronized(name){
for(int i=0;i<10;i++){
try {
Robot r = new Robot();
r.delay(1000);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+name+i);
}
}
}
public static void main(String args[]){
TestThread1 th1 = new TestThread1("A");
Thread t1 = new Thread(th1);
t1.start();
TestThread1 th2 = new TestThread1("B");
Thread t2 = new Thread(th2);
t2.start();
/* Robot r;
try {
r = new Robot();
r.delay(2000);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TestThread1.name="C";*/
TestThread1 th3 = new TestThread1("D");
Thread t3 = new Thread(th3);
t3.start();
}
}
结果:
Thread-0 D0
Thread-1 D0
Thread-1 D1
Thread-0 D1
Thread-0 D2
Thread-1 D2
Thread-1 D3
Thread-0 D3
Thread-1 D4
Thread-0 D4
Thread-1 D5
Thread-0 D5
Thread-1 D6
Thread-0 D6
Thread-1 D7
Thread-0 D7
Thread-0 D8
Thread-1 D8
Thread-1 D9
Thread-0 D9
Thread-2 D0
Thread-2 D1
Thread-2 D2
Thread-2 D3
Thread-2 D4
Thread-2 D5
Thread-2 D6
Thread-2 D7
Thread-2 D8
Thread-2 D9
发现当改变线程中static 的变量值的线程开启介入时,synchronized(static XX)便失效。
而下面的情况则未见失效,很诡异。
import java.awt.AWTException;
import java.awt.Robot;
public class TestThread1 implements Runnable {
private static String name;
public TestThread1(String name){
this.name=name;
}
@Override
public void run() {
synchronized(name){
for(int i=0;i<10;i++){
try {
Robot r = new Robot();
r.delay(1000);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+name+i);
}
}
}
public static void main(String args[]){
TestThread1 th1 = new TestThread1("A");
Thread t1 = new Thread(th1);
t1.start();
TestThread1 th2 = new TestThread1("B");
Thread t2 = new Thread(th2);
t2.start();
}
}
结果:
Thread-0 B0
Thread-0 B1
Thread-0 B2
Thread-0 B3
Thread-0 B4
Thread-0 B5
Thread-0 B6
Thread-0 B7
Thread-0 B8
Thread-0 B9
Thread-1 B0
Thread-1 B1
Thread-1 B2
Thread-1 B3
Thread-1 B4
Thread-1 B5
Thread-1 B6
Thread-1 B7
Thread-1 B8
Thread-1 B9