任何实现了Runnable接口的类都可以创建线程。这是为了弥补JAVA中单继承的特性。
同样的例子我们使用对Runnable接口的实现进行重写,三部曲:创建一个实现Runnable接口的类的实例,创建和其联系的线程,启动线程。
public class RunnableDemo1 implements Runnable
{
String name;
int count;
int delay;
public static void main(String arg[]) {
RunnableDemo1 one = new RunnableDemo1("one",1000,2);
//Thread类的定义是Thread(Runnable runnable),而且Thread类本身也实现了Runnable接口
Thread threadOne = new Thread(one);//注意要用Thread类创建一个线程类
threadOne.start();
RunnableDemo1 two = new RunnableDemo1("two",2000,5);
Thread threadTwo = new Thread(two);
threadTwo.start();
}
RunnableDemo1(String nameString,int countStart,int seconds) {
name = nameString;
count = countStart;
delay = seconds * 1000;
}
public void run() {
while(true) {
try {
System.out.println(name + ": " + count++);
Thread.sleep(delay);
} catch(InterruptedException e) {
return;
}
}
}
}
弹球动画:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Color;
import java.awt.Canvas;
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class RunnableDemo2 extends JFrame {
public static void main(String arg[]) {
new RunnableDemo2();
}
public RunnableDemo2() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{ System.exit(0); } } );
Container container = getContentPane();
BounceBallCanvas canvas = new BounceBallCanvas();
container.add(canvas);
pack();
canvas.start();
setLocation(250,100);
setVisible(true);
}
}
class BounceBallCanvas extends Canvas implements Runnable {
private double y;
private double x;
private final static int diameter = 10;
private final static double gravity = 0.3;
private double velocity;
private Rectangle rect;
private int width;
private int height;
private Image image = null;
private boolean running;
private Thread looper;
private int bounceCount;
BounceBallCanvas() {
rect = null;
setSize(100,300);
running = false;
height = 0;
width = 0;
}
public void start() {
if(!running) {
running = true;
looper = new Thread(this);
looper.start();
}
}
public void stop() {
running = false;
}
public void run() {
try {
while(running) {
Thread.sleep(33);
repaint();
}
} catch(Exception e) {
System.out.println(e.getStackTrace());
}
}
public void update(Graphics g) {
rect = getBounds(rect);
if((height != rect.height) || (rect.width != width)) {
height = rect.height;
width = rect.width;
velocity = 0.0;
bounceCount = 0;
x = width / 2;
y = 0;
image = createImage(rect.width,rect.height);
}
if(velocity > 0.0) {
if(((int)(y) + diameter) > rect.height) {
velocity = -velocity;
velocity *= 0.95;
y = (double)(rect.height - diameter);
if(++bounceCount > 20) {
y = 0;
velocity = 0.0;
bounceCount = 0;
}
}
}
velocity += gravity;
y += velocity;
paint(image.getGraphics());
g.drawImage(image,0,0,this);
}
public void paint(Graphics g) {
if(rect == null)
return;
g.setColor(Color.white);
g.fillRect(0,0,rect.width,rect.height);
g.setColor(Color.black);
g.fillOval((int)x,(int)y,diameter,diameter);
}
}
分享到:
相关推荐
7. **多线程**:JAVA提供了丰富的多线程支持,学习笔记会讲解线程的创建、同步、互斥以及线程池的使用。 8. **反射机制**:JAVA反射机制允许在运行时动态地获取类的信息并操作类的对象,这对于插件开发、动态代理等...
java学习笔记2(多线程)java学习笔记2(多线程)
通过"Java JDK 6学习笔记——ppt简体版",学习者可以系统地学习到如何使用JDK 6进行开发,包括环境配置、基本语法、类库使用、异常处理、IO流、网络编程、多线程等各个方面。PPT格式通常直观易懂,便于快速理解和...
Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...
Java并发编程学习笔记,研究JAVA并发多线程编程的一本教程,使用并发技术可以开发出并行算法,充分利用多处理器的计算能力,避免硬件资源浪费。目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java...
这份“Java JDK 6学习笔记——ppt简体版”涵盖了Java语言的核心概念、语法特性以及JDK 6的新功能,旨在帮助初学者和有经验的开发者深入理解并掌握这一版本的Java开发环境。 首先,Java JDK 6的安装与配置是学习的...
"Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...
6. **多线程**:Java支持多线程编程,通过Thread类和Runnable接口实现。线程同步和互斥机制如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和ReentrantLock类也是重要的知识点。 7. **网络...
【狂神Java学习笔记——前端入门——HTML、CSS、JavaScript学习代码】是针对初学者的一份详实的学习资料,这份笔记记录了跟随B站知名up主“遇见狂神说”的java系列视频中关于前端开发的基础内容。笔记内容不仅与视频...
在Java编程中,多线程是一项关键技能,它允许程序...通过深入学习和实践这些知识点,我们可以更好地理解和掌握Java多线程编程,提升程序的并发性能。结合源码分析和实际工具的使用,将使我们成为Java多线程领域的专家。
Java JDK 6学习笔记——ppt简体版 第20章.ppt
Java JDK 6学习笔记——ppt简体版 第19章.ppt
Java JDK 6学习笔记——ppt简体版 第18章.ppt
【Java多线程编程笔记】 Java 多线程编程是Java开发中不可或缺的一部分,它允许程序同时执行多个任务,提高程序的效率和响应性。在深入理解Java多线程之前,我们首先要理解操作系统中的基本概念——进程和线程。 1...