关于线程中的run()方法的局部变量:
对于具有相同目标对象的线程,当其中一个线程享有CPU资源时,目标对象自动调用RUN()方法,这时run()中的局部变量被分配内存空间。当轮到另一个线程享有CPU资源时,目标对象会再次调用接口中的run(),局部变量再次被分配内存空间,即run()已经调用了两次,分别运行在不同的线程中,即不同的不同的时间片里,不同线程中的run()方法中的局部变量互不干扰,一个线程改变了自己run()中的局部变量的值不会影响其它线程中的局部变量。
public class Move implements Runnable {
Thread zhang,keven;
public Move() {
zhang = new Thread(this);
keven = new Thread(this);
zhang.setName("zhang");
keven.setName("keven");
}
public void run() {
int i = 0;
while (true) {
if (Thread.currentThread() == zhang) {
i += 1;
System.out.println(zhang.getName()+"线程的局部变量是"+i);
if (i>=8) {
System.out.println("线程"+zhang.getName()+"进入死亡状态");
return;
}
} else {
i -= 1;
System.out.println(keven.getName()+"线程的局部变量i="+i);
if (i <= -20) {
System.out.println(keven.getName()+"线程进入死亡状态");
return;
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.err.println();
}
}
}
}
public class TestMove {
public TestMove() {
}
public static void main(String[] args) {
Move move = new Move();
move.keven.start();
move.zhang.start();
}
}
|
|