JAVA多线程编程实现龟兔赛跑

原创 2015年11月27日 18:46:04

Java的多线程建立在Thread类和Runnable接口上,可以通过继承Thread类和实现Runnable接口创建一个线程。

实现Runnable接口的类需要实例化run()方法。

实例化Thread类可以创建一个新的线程:我们可以创建一个类扩展Thread类,并且代码覆盖run()方法,与此同时用new创建一个线程的对象,当然还要调用start()方法来启动线程。

isAlive()方法判断一个线程是否结束。

下面简单用线程编写龟兔赛跑。

//跑道

import java.awt.*;

import java.awt.event.*;

public class Chang extends Frame implements ActionListener 

{

 

private Button quit = new Button("Quit");

private Button start = new Button("比赛");

//private Button halt = new Button("睡觉");

private Wg wg = null;

private Tz tz = null;

//Image wgg = Toolkit.getDefaultToolkit().getImage("wgg.GIF");

public Chang()//跑道

{

super("龟兔赛跑");

this.setLayout(new FlowLayout());//按钮浮于上方

add(quit);    quit.addActionListener(this);

add(start);   start.addActionListener(this);

//add(halt);  halt.addActionListener(this);

validate();

setSize(500,500);

setVisible(true);

int x = 100;//产生乌龟

int y = 0;

int x2 = 200;//产生兔子

int y2 = 0;

this.wg = new Wg(this,x,y);

this.tz = new Tz(this,x2,y2);

this.repaint();

}

public void paint(Graphics g)

{

//if(wg[0] != null)

wg.draw(g);

tz.draw(g);

g.fillRect(0, 450, 500, 10);

}

 

public void actionPerformed(ActionEvent arg)

{

if(arg.getSource() == start)

{

wg.start();

tz.start();

}

if(arg.getSource() == quit)

System.exit(0);

}

public static void main(String args[])

{

Chang  table = new Chang();

}

 

}

 //兔子

import java.awt.Color;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.Graphics;

 

public class Tz extends Thread

{

private int xdir = 0;

private int ydir = 10;//单位时间跑3

private boolean running = false;

private Chang chang = null;//操场

 int x,y,time = 0;

 Image tzz = Toolkit.getDefaultToolkit().getImage("tzz.jpg");

 Image shu = Toolkit.getDefaultToolkit().getImage("shu.jpg");

 public Tz(Chang _chang,int _x,int _y)

{

this.chang = _chang;

this.x = _x;

this.y = _y;

start();

}

 public void start ()

{

running = true;

super.start();

}

 public void halt(  )//中止

{

running = false;

}

public void run()

{

while ( running)

{

move();

try {

sleep(200);

} catch (InterruptedException e) {  

e.printStackTrace();

}

chang.repaint();      

}

}

public void move( )

{

if(y <= 450)

 if(y == 200)//兔子睡觉

 {

 try {

sleep(9000);

} catch (InterruptedException e) {  

e.printStackTrace();

}

 }

y = y + 10;

}

 

}

public int getx() {

return x;

}

public int gety() {

return y;

}

 

void draw(Graphics g)

{

g.setColor(Color.RED);

g.drawImage(tzz, x, y, 30, 40, chang);

g.drawImage(shu,240,200,30,40,chang);

}

 

}

//乌龟

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

 

public class Wg extends Thread                                                                                                                            

{

 int xdir = 0;

 int ydir = 3;//单位时间跑3

private boolean running = false;

private Chang chang = null;//操场

 int x,y;

Image wgg = Toolkit.getDefaultToolkit().getImage("wgg.jpg");

public Wg(Chang _chang,int _x,int _y)

{

this.chang = _chang;

this.x = _x;

this.y = _y;

start();

}

public void start ()

{

//Thread w = new Thread(this,"wgg");

running = true;

super.start();

}

public void halt()//中止

{

running = false;

}

public void run()

{

while(running)

{

move();

try{

sleep(100);

}catch(InterruptedException ie){

System.err.println("Thread interrupted");

}    

chang.repaint();             

}

}

public void move()

{

if(y <= chang.getSize().width-50)

{

x += xdir;

y += ydir;

}

}

public void draw(Graphics g)

{

g.drawImage(wgg, x, y, 30, 40, chang);

}

}

本人仍处于学习阶段,所以有什么不对的,请大家多多指教。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java多线程——龟兔赛跑

-_- 学java快有一个月了,之前一直有记录自己学习过程的想法,但是太懒了所以…… 今天进入线程学习的部分了,老师说是最最最最难的,所以还是记录一下吧~~从今天的作业说起一、题目: 实现龟兔赛跑...

龟兔赛跑之Java多线程通讯初识

龟兔赛跑案例,是一个经典的多线程并发的实例。通过这个案例的学习,可以对Java中线程之间通讯有一个初步的认识。...

Java多线程龟兔赛跑

  • 2011年05月13日 12:13
  • 1KB
  • 下载

多线程实现——新龟兔赛跑

新龟兔赛跑: 规则:龟兔同时起步,每10毫秒秒跑1米,终点为100米,兔子跑步的能力强,乌龟跑步的能力弱 途中:1.兔子跑到10米的时候,谦让乌龟一下,接着跑 ...
  • Mus_Li
  • Mus_Li
  • 2017年04月23日 13:14
  • 577

龟兔赛跑多线程C++程序

  • 2013年04月24日 11:10
  • 2KB
  • 下载

用面向对象实现支付功能、用线程实现龟兔赛跑、Java调用CMD运行adb命令并保存结果及归档

本文主要介绍三个部分:用面向对象实现支付功能、用线程实现龟兔赛跑、Java调用CMD运行adb命令并保存结果及归档、线程如何传回数据。...
  • jscly
  • jscly
  • 2016年07月31日 22:19
  • 371

多线程演示龟兔赛跑

  • 2011年12月26日 17:08
  • 1KB
  • 下载

多线程小案例之龟兔赛跑

多线程小案例之龟兔赛跑
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA多线程编程实现龟兔赛跑
举报原因:
原因补充:

(最多只允许输入30个字)