视频教程上的一段代码:public class TestSync implements Runnable {
Timer timer = new Timer();
public static void main(String[] args) {
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
}class Timer{
private static int num = 0;
public synchronized void add(String name){
num ++;
try { Thread.sleep(1); }
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
}
}教程里的结果是:
t1, 你是第2个使用timer的线程
t2, 你是第2个使用timer的线程自己实践的结果是:
t1, 你是第1个使用timer的线程
t2, 你是第2个使用timer的线程 教程是2年多前录的了,会不会是CPU的原因呢 有请高手指点下
Timer timer = new Timer();
public static void main(String[] args) {
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
}class Timer{
private static int num = 0;
public synchronized void add(String name){
num ++;
try { Thread.sleep(1); }
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
}
}教程里的结果是:
t1, 你是第2个使用timer的线程
t2, 你是第2个使用timer的线程自己实践的结果是:
t1, 你是第1个使用timer的线程
t2, 你是第2个使用timer的线程 教程是2年多前录的了,会不会是CPU的原因呢 有请高手指点下
怎么看怎么都会是顺序进入add方法的
是这么解释的 我觉的也有道理.教程是要说明加锁
synchronized(this){
num ++;
try { Thread.sleep(1); }
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
}
不去掉,就肯定是1、2
Timer timer = new Timer();
public static void main(String[] args) {
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
} class Timer{
private static int num = 0;
public void add(String name){
num ++;
try { Thread.sleep(1); }
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
}
}