多线程中Synchronized来标记run()方法的问题

若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。

这段话怎么理解?能否帮我写一个程序以助于理解一下呢?

哪里看到的? ms在java中对Thread类的run方法加synchronized 并不会锁住对象:

[code="java"]// 线程类
public class MyExtendThread extends Thread {

private int count = 1, number;

public MyExtendThread(int num) {
    number = num;
    System.out.println("Create Thread-" + number);
}

@Override
public synchronized void run() {
    while (true) {
        System.out.println("Thread-" + number + " run " + count
                + " time(s)");
        if (++count == 3)
            return;
    }
}

public synchronized void canRun() {
    try {
        sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("========");
}

}[/code]

[code="java"]//测试类
public class TestThread {
public static void main(String[] args) {
MyExtendThread thread = new MyExtendThread(1);
thread.start();
thread.canRun();
System.out.println("end");
}
}[/code]

[code="java"]运行结果

Create Thread-1

end
Thread-1 run 1 time(s)
Thread-1 run 2 time(s)[/code]

线程类的canRun方法还是执行了。