当前位置: 移动技术网 > IT编程>开发语言>Java > Java线程(实现多线程小球运动)

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

2020年08月17日  | 移动技术网IT编程  | 我要评论
一、线程入门进程:进行中的程序,操作系统分配资源的最小单位线程: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(); } 

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

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

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网