若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。
这段话怎么理解?能否帮我写一个程序以助于理解一下呢?
若将线程类的方法 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"]运行结果
end
Thread-1 run 1 time(s)
Thread-1 run 2 time(s)[/code]
线程类的canRun方法还是执行了。