多线程:打砖块的初步想法

   多线程:打砖块的初步实现
线程:
  每个Java程序都有一个主线程,当程序执行后,主线程会自动调用程序的main()方法;
  
单线程:
  单线程的特点是,程序一步一步执行,上一步没有执行完毕,下一步就不会执行;
  
多线程:
  而多线程模型是将代码的调用放到一个独立的运行单元:线程中多步并发执行,所以有省时,并发的优点;
  线程并不占用系统资源,它与进程共享资源;
  
多线程的实现:
    每个线程对象都是一个继承了java.util.Thread类的对象或implements了java.util.Runnable接口的类的对象,线程的启运是通过调用线程对象的start()方法启动,线程运行是从线程对象的run方法开始,当线程对象的run()方法结束后,线程即运行结束。线程的创建,一般通过如下两种方法:
   一个是继承Thread类对象,然后重写run()方法,在run()方法中实现需要进行的线程,然后调用start()方法来启动,
   另一个是继承Runnable接口,实现它的run()方法,然后将这个类的实例作为Thread的构造方法的参数,创建Thread类的实例,即可做为线程启动。

多线程实例:打砖块的实现

打砖块的实现首先要实现小球的移动,这就需要用到一个线程:首先创建一个线程,然后在run方法中画一个小球,然后用while(true)无限循环来不停的改变坐标实现小球的移动,当然这样的代价是CPU的占用率非常高,所以我们没循环一次就休息10mm,方法是线程的sleep()方法,这个方法可能产生异常,所以要用try、catch来实现。小球的移动当然还需要实现重绘,在面板中需要不停的更新。具体代码:
public class boll_change implements Runnable{
mainPanel mm;
int i=100;
int j=350;
int sign1=5; // 标志位i
int sign2=5; // 标志位j
Image boll = new ImageIcon("five_images/baiqi.png").getImage();
MyKeyListener key;

public boll_change(mainPanel mm,MyKeyListener key)
{
this.mm=mm;
this.key=key;
}

@Override
public void run()
{
//循环执行小球移动
while(true){
//如果触到右边界,则转向
if(i>=560){sign1=-5;}
//左边界,转向
else if(i<=10){sign1=5;}
//如果被底座接住,则转向
if(j>=530&&j<=540&&i-key.keyi<249&&i-key.keyi>0){sign2=-5;}
//到达上顶,转向
else if(j<=50){sign2=5;}


if(mm.ml_move.getLength()!=0)
mm.ml_move.delet(0);
i=i+sign1;
j=j+sign2;
Shapes shape = new reImage(i,j,30,30,Color.white, boll,mm);
mm.ml_move.add(shape);
mm.repaint();
//睡眠
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
小球的移动实现后,还要实现砖块的多线程,砖块的多线程体现在当小球碰到时要及时消失,这也要实现重绘,砖块事件和小球的移动是同时发生的,这也体现了多线程的并发执行,同样,底座的移动也要用多线程来实现,具体不写了,初步完成后的简陋画面如下:

  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值