class Move implements Runnable
{
Thread zhang,keven;
Move()
{
zhang=new Thread(this);
zhang.setName("张名");
keven=new Thread(this);
keven.setName("Jam.keven");
}
public void run()
{
int i=0;
while(true)
{
if(Thread.currentThread()==zhang)
{
i=i+1;
System.out.printf("%s线程的局部变量i=%d\n",zhang.getName(),i);
if(i>=8)
{
System.out.printf("%s线程进入死亡状态\n",zhang.getName());
return;
}
}
else if(Thread.currentThread()==keven)
{
i=i-1;
System.out.printf("%s线程的局部变量i=%d\n",keven.getName(),i);
if(i<=-20)
{
System.out.printf("%s线程进入死亡状态\n",keven.getName());
return;
}
}
try{
Thread.sleep(800);
}
catch(InterruptedException e)
{
}
}
}
}
class Example
{
public static void main(String args[ ])
{
Move move=new Move();
move.zhang.start();
move.keven.start();
}
}这是源代码,为什么我把while(true)去掉后 这两个线程只能各自执行一次?我感觉这两个线程的循环执行和while(true)
没有关系啊 只要执行run()方法 就可以正常的循环 并不需要while(true)啊 谁能告诉我是怎么回事 这个while(true)
究竟在线程中起的是什么作用?
{
Thread zhang,keven;
Move()
{
zhang=new Thread(this);
zhang.setName("张名");
keven=new Thread(this);
keven.setName("Jam.keven");
}
public void run()
{
int i=0;
while(true)
{
if(Thread.currentThread()==zhang)
{
i=i+1;
System.out.printf("%s线程的局部变量i=%d\n",zhang.getName(),i);
if(i>=8)
{
System.out.printf("%s线程进入死亡状态\n",zhang.getName());
return;
}
}
else if(Thread.currentThread()==keven)
{
i=i-1;
System.out.printf("%s线程的局部变量i=%d\n",keven.getName(),i);
if(i<=-20)
{
System.out.printf("%s线程进入死亡状态\n",keven.getName());
return;
}
}
try{
Thread.sleep(800);
}
catch(InterruptedException e)
{
}
}
}
}
class Example
{
public static void main(String args[ ])
{
Move move=new Move();
move.zhang.start();
move.keven.start();
}
}这是源代码,为什么我把while(true)去掉后 这两个线程只能各自执行一次?我感觉这两个线程的循环执行和while(true)
没有关系啊 只要执行run()方法 就可以正常的循环 并不需要while(true)啊 谁能告诉我是怎么回事 这个while(true)
究竟在线程中起的是什么作用?
当线程启动时,自动调用run()方法,while(true)保证线程不断执行,
你也可以自己定义判断条件,通常用来控制线程class Move implements Runnable { ..... private boolean running = true; public void run() {
while(running) {
//do something
}
} public boolean isRunning() {
return running;
} public void setRunning(boolean running) {
this.running = running;
}
....
}
如果在一个main()方法里写这样一段代码.
main(string args[]){
int i = 0 ;
while(true){
i++;
if(i<8)
system.out.println("this is the main()");
}
}如果把while(true)去掉 main()方法也只执行一次.
run()方法和main()方法的执行过程是一样的.只是它们在轮流的占用CPU 在各自执行自己的代码.
主要体现在run()方法中 一旦run()的方法执行完毕线程对应的就会停止执行
回收对应的内存,cpu 就会停止对其进行运算直到下次创建并重复调用该线程类至于while(true){}
中的内容被看做是重复执行的 只有程序终止 或者被打断才会停止执行