请问class Runner里的run方法synchronized怎么不起作用????运行起来还是输出“t1第2个访问者t2第2个访问者”。
我想让他输出“t1第1个访问者t2第2个访问者”。public class TestSync{
public static void main(String[] args){
Runner t1 = new Runner();
Runner t2 = new Runner();
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
}class Runner extends Thread{
static int num;
public void run(){
synchronized(this){
num++;
try{
Thread.sleep(1);
}catch(InterruptedException e){}
System.out.println(getName()+"第"+num+"个访问者");
}
}
}
我想让他输出“t1第1个访问者t2第2个访问者”。public class TestSync{
public static void main(String[] args){
Runner t1 = new Runner();
Runner t2 = new Runner();
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
}class Runner extends Thread{
static int num;
public void run(){
synchronized(this){
num++;
try{
Thread.sleep(1);
}catch(InterruptedException e){}
System.out.println(getName()+"第"+num+"个访问者");
}
}
}
static int num;
private static Object lock = new Object();
public void run() {
synchronized (lock) { // 锁定公用资源,才能形成互斥
num++;
try {
Thread.sleep(1);
} catch(InterruptedException e) { }
System.out.println(getName()+"第"+num+"个访问者");
}
}
}
请问这句话是什么意思?private static Object lock = new Object();
请确认下:
1, 代码没抄错
2, JRE 没有傻掉