读书人

小球碰撞“由于有你所以不孤单”

发布时间: 2013-08-09 15:16:24 作者: rapoo

小球碰撞“因为有你,所以不孤单”——多线程
线程:在接触之前一直觉得线程是很高端的,学了线程就会有质的飞跃,我们就可以从只能写出简单的界面什么滴,到可以做一些小游戏,坦克大战、弹球。但当接触学习后,发现其实也就是几行代码的问题,并没有当初接触前想的那么神乎其神。
线程可以理解为“程序内部一个独立的运行单位”。每个java程序至少都至少有一个线程-主程序。
每个独立运行的对象都可以看做是一个线程,坦克大战中的各个坦克、弹球中的各个小球、雷电中的各个飞机都可以理解是一个线程。

单线程:
public void ma(){
mb();
md();
}
public void mb(){
mc();
}
public void mc(){
}
public void md(){
}
这种模型的特点是:只有当mb执行完毕后,ma才会返回,只有当mc执行完毕后,mb才可能完
成;在ma()调用中,只有当mb()执行完毕后,才会执行到md(),这是顺序的调用模型,我们
称之为单线程模型。


多线程:
多线程模型就是将代码的调用放到一个独立的运行单元-线程中,让多个调用并执行。

多线程的实现:关键字 Thread start()
每个线程对象都是继承java.unit.Thread类的对象或implements了java.unit.Runnable
接口类的对象,线程的启动是通过调用线程对象的start()方法启动,线程的运行是
从线程对象的run方法开始,的那个线程对象的run()方法结束后线程结束。

继承Thread类实现线程

public calss 类名 extends Thread{//继承Thread类
//线程执行入口,调用线程对象的start()方法后,线程就从它的run方法开始独立执行
public void run(){
//线程中具体要实现的功能
code
}
}

//在主函数中实例化对象并调用其start()方法
类名 对象名 = new 对象名();
对象名.start();//开启线程

实例:
小球碰撞

小球类:

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class BallBoard extends JPanel {/** * @param args */public static void main(String[] args) { BallBoard  bb = new BallBoard ();bb.initUI();}private void initUI() {JFrame  jf = new JFrame();jf.setTitle("小球移动");jf.setResizable(false);jf.setDefaultCloseOperation(3);jf.setLocationRelativeTo(null);jf.setSize(400, 450);jp = new JPanel();jp.setPreferredSize(new Dimension(400,400));jp.setBackground(Color.BLACK);jf.add(jp,BorderLayout.CENTER);JPanel jp1 = new JPanel();jp1.setPreferredSize(new Dimension(400,40));JButton jb1 = new JButton("Add");jb1.setPreferredSize(new Dimension(80,30));ActionListener al = new ActionListener(){public void actionPerformed(ActionEvent e) {String jb1 = e.getActionCommand();if(jb1.equals("Add")){count++;Ball ball = new Ball(jp,ball_1,count);ball_1[ball.getcount()-1]=ball;ball.start();}}};jb1.addActionListener(al);jp1.add(jb1);jf.add(jp1,BorderLayout.SOUTH);jf.setVisible(true);} JPanel jp; Ball[] ball_1 =new Ball[10]; private int count=0;}

读书人网 >编程

热点推荐