非常精典java多线程程序!我的一个疑问!请帮忙解答!谢谢哦!

来源:百度知道 编辑:UC知道 时间:2024/05/27 02:47:20
我的这个java龟兔赛跑程序非常精典是系统分析师写的,程序没有错误.但我有点不懂.程序中是乌龟先跑到终点,当它跑到终点后stop=true,那么while(!stop)的循环条件为假,跳出循环,此后不执行循环了.那么画兔子的坐标x1不发生改变了.但是结果当乌龟停了后,兔子还可跑到终点.请解释一下为什么?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JApplet;

public class RabTor1 extends JApplet implements Runnable{
Image backpic,rabbit,tortoise;
int x1=0,y1=0;
int x2=0,y2=100;//图片的位移!
int rab_road=0,tor_road=0;//图片跑的路程!
int rab_time=0,tor_time=0;//图片移动用的时间
String str1="rabbit",str2="tortoise";//给字符串付初值!
//boolean stop=false;
public void init()//Applet中的初始化函数有类中构造函数的作用!最先调用!
{
backpic = getImage(getCodeBase(), "back.gif");//将图片对象与图片 绑定!
rabbit = getImage(getCodeBase(), "rabbit.jpg");
tortoise = getImage(getCodeBase(), "tortoise.jpg");
//System.out.println("intintintitnitn!");
}
public void paint(Graphics g)//此

Thread rab = new Thread(this, "rabbit");
Thread tor = new Thread(this, "tortoise");
rab.start();
tor.start();

他们是两个互相独立的线程 二者互不影响
也就是说兔子调用run方法一直满足if (threadName.equals("rabbit"))这个条件 始终执行这里面的语句
乌龟调用run方法一直满足else if (threadName.equals("tortoise"))这个条件 始终执行这里面的语句 两个线程各自执行自己的东西 所以乌龟停了以后兔子当然是可以执行自己的线程了

实际上,这里有两个线程在同时执行run()这个过程,lz可以认为是有两个程序在同时执行run这个方法

而在run方法内部是如何判断谁调用的他呢
String threadName=Thread.currentThread().getName();//取得当前线程的名子

由于程序在创建线程的时候,指定了名字
Thread rab = new Thread(this, "rabbit");//创建一个兔子线程,this表示在这个类中找.rabbit是线程的名子.
Thread tor = new Thread(this, "tortoise");

所以getName() 将返回的是 "rabbit" 或是"tortoise" 根据当时执行run的是哪个线程而不同

由此,程序后面依靠这个threadName来执行不同的工作
if(threadName.equals("rabbit"))//兔子动的实现方法!
...

else if(threadName.equals("tortoise"))//乌龟移动实现的方法!