欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java线程(实现多线程小球运动)

程序员文章站 2022-12-08 17:35:10
一、线程入门进程:进行中的程序,操作系统分配资源的最小单位线程:CPU调度的最小单位,线程属于某个进程单线程:按照程序的顺序执行多线程:能让进程同时执行多段程序二、实现多线程小球Thread线程类Runnable接口:规定线程需要执行的内容写一个界面,实现鼠标点击一下,出现一个小球,同时小球向右移动,再点击一下鼠标,又出现一个小球,同时小球向右移动…第一步,先写一个窗体界面public void initUI() {JFrame jf = new JFrame();...

一、线程入门

  • 进程:进行中的程序,操作系统分配资源的最小单位
  • 线程:CPU调度的最小单位,线程属于某个进程
  • 单线程:按照程序的顺序执行
  • 多线程:能让进程同时执行多段程序

二、实现多线程小球

  • Thread线程类
  • Runnable接口:规定线程需要执行的内容

写一个界面,实现鼠标点击一下,出现一个小球,同时小球向右移动,再点击一下鼠标,又出现一个小球,同时小球向右移动…

第一步,先写一个窗体界面

 public void initUI() { JFrame jf = new JFrame(); jf.setTitle("BallGame"); jf.setSize(800, 600); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE); jf.setBackground(Color.WHITE); jf.setVisible(true); jf.getContentPane().setVisible(false); Graphics g =jf.getGraphics(); MyListener ml = new MyListener(g,x,y,m,n); jf.addMouseListener(ml); } 

第二步,写了一个MyBall类,用来实现小球的绘制和移动
move方法,其中x,y是小球坐标,初始值由鼠标点击获取,之后会随着小球的运动而发生改变。当小球运动到窗体边界时,就会调转方向,继续移动。

 public void move() { x += m; y += n; if(x > 740) { m = -m; } if(x < 0) { m = -m; } if(y > 540) { n = -n; } if(y < 0) { n = -n; } } 

m,n代表小球在左右方向上移动的速度,为了让小球的运动具有随机性,我定义了一个随机数,来确定小球移动的方向,向右,向下或者斜向下。(这里关于方向还可以有更多的设计,这里我就简单定义了一下)

 Random r = new Random(); int num = r.nextInt(3); switch(num) { case 0: m = 0; n = 2; break; case 1: m = 0; n = 2; break; case 2: m = 2; n = 2; break; } 

ball_move方法实现了小球的绘制与移动,首先,根据x,y坐标画一个小球出来,等待100ms,在同一位置画一个与背景色一致的的圆,接着,小球坐标x,y发生改变,继续画圆、覆盖,这样连续下来,我们看到的就是小球朝着某个方向移动。

 public void ball_move() { while(true) { g.setColor(color); g.fillOval(x, y, 50, 50); try { Thread.sleep(100); } catch (InterruptedException e1) { e1.printStackTrace(); } g.setColor(Color.WHITE); g.fillOval(x, y, 50, 50); this.move(); } } 

第三步,创建一个MyRunnable方法来实现Runnable接口中的run方法
这里就创建小球对象,让小球移动就可以了

 public void run() { Random r = new Random(); int num = r.nextInt(3); switch(num) { case 0: m = 0; n = 2; break; case 1: m = 0; n = 2; break; case 2: m = 2; n = 2; break; } MyBall ball = new MyBall(x, y, m, n, g,color); ball.ball_move(); } 

第四步,创建鼠标监听器,MyListener类
获取鼠标点击出的坐标,并在鼠标点击后,创建线程。

 public void mouseClicked(MouseEvent e) { //获取坐标 x = e.getX(); y = e.getY(); //创建线程 Random r1 = new Random(); color = new Color(r1.nextInt(256), r1.nextInt(256), r1.nextInt(256)); MyRunnable mr = new MyRunnable(g, x, y, m, n, jf,color); Thread thread = new Thread(mr); thread.start(); } 

这样一个简单的多线程小球就做好了
看一下效果

Java线程(实现多线程小球运动)

当界面中,小球的数量增多时,会发现一个问题,小球的颜色变得不稳定,同时还出现了残影,这个问题的产生是多线程应用的必然,我将在下一节来解释为什么会这样,同时用一个新的方法来实现小球运动的操作。

本文地址:https://blog.csdn.net/qq_43340300/article/details/108026874