package test4;public class ThreadDemo {
public static void main(String[] args) {
demow d = new demow();
Thread t = new Thread(d, "1");
Thread t1 = new Thread(d, "2");
t.start();
t1.start(); }
}class demow implements Runnable {
private int num = 0; @Override
public void run() {
show();
} public void show() {
synchronized (this) {
while (num < 100) {
System.out.println(Thread.currentThread().getName() + ",num=" + num++);
}
}
}
}

解决方案 »

  1.   

    楼主的程序的问题导致线程2看起来没有运行,因为楼主对this加了锁,线程1运行后线程2需要等待线程1释放锁。由于线程变量都是一个也就是d,此时线程1和线程2是共享num变量的。当线程1释放了锁之后,线程2运行发现num已经大于100,不符合进入循环的条件,直接退出了。所以看上去线程2没有执行。
    楼主可以在synchronized锁和while之间打印一下System.out.println(Thread.currentThread().getName() + ",num:" + num);,就可以得到验证了。