时间:2021-05-19
没有直接采用继承Thread类或者继承Runnable的接口来实现多线程,而是使用了匿名内部类。
要导入的类:
import javax.swing.*; import java.awt.*;1.定义SowPanel类,继承JPanel类,这个类有两个整型数组成员,用来保存雪花起始位置。在构造函数中为数组赋初值;重写父类的paint()方法;定义一个启动多线程的startSnow()方法。
class SnowPanel extends JPanel{ //定义整型数组,存储雪花坐标 private int[] x=new int[300]; private int[] y=new int[300]; public SnowPanel() { //设置背景为黑色 setBackground(Color.black); //用随机数初始化雪花坐标 for(int i=0;i<x.length;i++) { x[i]=(int)(Math.random()*800); y[i]=(int)(Math.random()*600); } } public void paint(Graphics g) { //继承父类画的方法 super.paint(g); //设置颜色为白色 g.setColor(Color.white); //利用循环画出多个雪花 for(int i=0;i<x.length;i++) { g.drawString("*",x[i],y[i]); } } //定义一个方法启动多线程,并使用匿名内部类 public void startSnow() { new Thread() { public void run() { while(true) { for(int i=0;i<y.length;i++) { //坐标下移 y[i]++; //检查是否越界 if(y[i]==600) y[i]=0; //重绘 repaint(); } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); }}2.定义ShowFrame类,继承Jframe 类。在构造方法中设置窗口的显示属性,并创建ShowPanel对象,添加到窗口中。
class SnowPanel extends JPanel { //定义整型数组,存储雪花坐标 private int[] x=new int[300]; private int[] y=new int[300]; public SnowPanel() { //设置背景为黑色 setBackground(Color.black); //用随机数初始化雪花坐标 for(int i=0;i<x.length;i++) { x[i]=(int)(Math.random()*800); y[i]=(int)(Math.random()*600); } } public void paint(Graphics g) { //继承父类画的方法 super.paint(g); //设置颜色为白色 g.setColor(Color.white); //利用循环画出多个雪花 for(int i=0;i<x.length;i++) { g.drawString("*",x[i],y[i]); } } //定义一个方法启动多线程,并使用匿名内部类 public void startSnow() { new Thread() { public void run() { while(true) { for(int i=0;i<y.length;i++) { //坐标下移 y[i]++; //检查是否越界 if(y[i]==600) y[i]=0; //重绘 repaint(); } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }3.运行效果图片(此为静态图):
疑问:发现其他的不改变,继承Frame、Panel和继承JFrame、Jpanel的运行效果是不同的,前者显示的下雪场景总是有闪烁的感觉;后者则没有闪烁,个人感觉后者效果更好些。
接下来我们来看个例子
这里我们做一个完整的例子来说明线程产生的方式不同而生成的线程的区别:
上面10个线程对象产生的10个线程运行时打印了10次1。下面10个线程对象产生的10个线程运行时打印了1到10。我们把下面的10个线程称为同一实例(Runnable实例)的多个线程。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、java多线程基本入门java多线程编程还是比较重要的,在实际业务开发中经常要遇到这个问题。java多线程,传统创建线程的方式有两种。1、继承自Thread
本文实例讲述了Java并发编程之常用的多线程实现方式。分享给大家供大家参考,具体如下:概述常用的多线程实现方式有2种:1. 继承Thread类2. 实现Runn
这篇文章将向大家展示Java编程利用socket多线程访问服务器文件代码示例,如果您想先了解Java多线程socket编程的基础知识,可以看下这篇文章:Java
前面已经演示了Python:使用threading模块实现多线程编程二两种方式起线程和Python:使用threading模块实现多线程编程三threading
在上篇文章给大家介绍了java多线程的实现方式,通过本文给大家介绍java多线程实例,对java多线程感兴趣的朋友一起学习吧首先给大家说下多线程的优缺点多线程的