在讲线程之前,我们先来谈谈进程。在我接触电脑的一段时间后,开始发现当打开任务管理器后,会有一个进程的显示,下面的映像名称里有很多的可执行文件。这些可执行文件有的是系统默认的,有的是我们打开的,他们都会占用一定内存。
知道了进程,那么什么是线程呢?线程就是运行中程序的调度单位。
我们知道,以前我们写的代码,程序都是从上往下进行,就是必须要执行完上一句才会执行下一句。我们称这种为单线程的程序。那么多线程就是指同时有多个单线程同时进行运作,比如我们今天要做的小球游戏,
如果面板中有多个小球在运动,那么我们就要建立多个小球对象,然后让他们同时运动,但是如果按我们以前的方式,代码从上往下执行,那么想控制多个小球显然很困难,这时我们就要运用到多线程。
讲了那么多,多线程怎么实现呢?
这里有两个方法,一个是继承Thread类,一个是实现runnable接口。具体的应用我们在练习中体现。
练习:控制小球的移动,要求:1.小球不能超出边框2.小球相互碰撞,进行反弹.
这个练习首先要求我们掌握基本界面,知道主界面继承JPanel,重写paint方法以保存面板。然后创建小球类,写出构造方法以及get,set方法,继承线程类,重写run方法。最关键的就是小球要在边界处反弹,还有就是小球遇到其他的小球要发生碰撞。最后让线程run起来~~~
首先我们做出小球界面:
- public class BallFrame extends JPanel {
- // 实例化一个数组对象
- private Ball[] ball = new Ball[10];
- // 实例化一个随机数对象
- private Random r = new Random();
- public static void main(String[] args) {
- // 实例化一个面板对象
- BallFrame bf = new BallFrame();
- // 调用initUI方法
- bf.initUI();
- }
- // 界面函数
- public void initUI() {
- JFrame jf = new JFrame();// 实例化面板对象
- jf.setSize(new Dimension(600, 600));// 设置面板大小
- jf.setResizable(false);// 设置不可调节大小
- jf.setDefaultCloseOperation(3);// 设置关闭按钮
- jf.setLocationRelativeTo(null);// 设置窗体居中
- this.setBackground(Color.white);// 设置面板背景为白色
- jf.setVisible(true);// 设置窗体可见
- jf.add(this, BorderLayout.CENTER);// 将面板添加到窗体上
- for (int i = 0; i < ball.length; i++) {
- // 实例化每个小球对象
- ball[i] = new Ball(new Color(r.nextInt(255), r.nextInt(255),
- r.nextInt(255)), r.nextInt(550), r.nextInt(550), 50,
- r.nextInt(4) + 1, r.nextInt(4) + 1, this, i);
- }