今天学习的是线程的有关知识。在了解线程之前我们应该先了解进程是什么,进程就是进程是操作系统结构的基础,是一个正在执行的程序。而线程则是包含在进程之中的,线程之间可以交互数据,且一个进程中可以包含多个线程。
单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。而多线程程序则不然,它只会先通知一个线程开始执行,然后再依次通知下一个,并不会理会线程是否完成。
要使一个程序实现线程有两种方法:一种方法是将类声明为 Thread 的子类,该子类应重写 Thread 类的 run 方法。另一种方法是声明实现 Runnable 接口的类,该类然后实现 run 方法。
以下是简单的线程示例:弹球碰撞(球之间的碰撞还未完成)
小球运动的类
public class Ball extends Thread {
// 得到的画布对象
Graphics g;
// 小球的初始位置
int x = 0, y = 0;
// 小球移动的增量
int dx = 0, dy = 0;
BallUI ballui;
public Ball(BallUI ballui) {
this.ballui = ballui;
// 由窗体对象得到画布对象
g = ballui.panel.getGraphics();
// 由随机数发生器产生小球位置的信息
Random rd = new Random();
x = rd.nextInt(100) + 150;
y = rd.nextInt(100) + 150;
dx = rd.nextInt(10) - 5;
dy = rd.nextInt(10) - 5;
}
/**
* 重写run方法
*/
public void run() {
move();
}
public void move() {
while (true) {
// 擦除球
g.setColor(ballui.panel.getBackground());
g.fillOval(x, y, 30, 30);
// 画球
g.setColor(Color.BLACK);
if ((x < 395 && x > 0) && (y > 0 && y < 370)) {// 如果球未碰边
g.fillOval(x = x + dx, y = y + dy, 30, 30);
} else if (!(x < 395 && x > 0) && !(y > 0 && y < 370)) {// 如果球同时碰2两条边,同时改变dx,dy
dx = -dx;
dy = -dy;
g.fillOval(x = x + dx, y = y + dy, 30, 30);
} else if ((x < 395 && x > 0) && !(y > 0 && y < 370)) {// 如果球碰竖边
dy = -dy;
g.fillOval(x = x + dx, y = y + dy, 30, 30);
} else if (!(x < 395 && x > 0) && (y > 0 && y < 370)) {// 如果球碰横边
dx = -dx;
g.fillOval(x = x + dx, y = y + dy, 30, 30);
}
try {
sleep(25);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
简单弹球游戏的界面的类
public class BallUI extends JFrame {
public static void main(String args[]) {
// 创建界面对象
BallUI ballui = new BallUI();
ballui.showUI();
}
public void showUI() {
this.setTitle("弹球游戏 test-1");
this.setSize(500, 500);
// 创建菜单栏和菜单
JMenuBar jmb = new JMenuBar();
this.setJMenuBar(jmb);
JMenu jm = new JMenu("游戏");
jmb.add(jm);
JMenuItem jmi = new JMenuItem("开始");
jm.add(jmi);
// 建立流式布局管理器
java.awt.FlowLayout fl = new java.awt.FlowLayout();
this.setLayout(fl);
// 创建JPanel作为游戏区域
panel = new JPanel();
Dimension dims = new java.awt.Dimension(425, 400);
panel.setPreferredSize(dims);
panel.setBackground(java.awt.Color.LIGHT_GRAY);
this.add(panel);
// 创建开始的按钮
JButton jbu = new JButton("开始");
this.add(jbu);
this.setDefaultCloseOperation(3);
this.setVisible(true);
// 取得画布对象
final Graphics g = panel.getGraphics();
// 创建监听器对象(匿名内部类)
ActionListener alis = new ActionListener() {
public void actionPerformed(ActionEvent e) {
//创建一个小球对象
Ball ball = new Ball(getUI());
ball.start();
}
};
//将监听器对象加在按钮上
jbu.addActionListener(alis);
}
public BallUI getUI(){
return this;
}
JPanel panel;
}
运行图像
- 大小: 22.6 KB
分享到:
相关推荐
本压缩包“多线程基础与基于多线程的简单聊天室”提供了对多线程技术的实践理解和二次开发的基础。以下是关于这个主题的详细知识点: 1. **多线程的概念**:多线程是指在一个程序中同时执行多个不同的线程,每个...
然而,一个进程内部可以包含多个线程,这些线程共享同一份进程资源,如内存空间。 线程则是执行的最小单元,它是在进程中执行的一条指令序列。相比进程,线程创建和销毁的成本较低,因为它们共享同一进程的内存空间...
#### 多线程基础概念 在计算机科学中,**多线程**是一种让单个程序执行多个任务的技术。每个任务被称为一个“线程”,它们可以并行地执行,从而提高程序的效率和响应性。多线程技术广泛应用于各种操作系统和应用...
1. **新建状态**:当使用`new`关键字创建了一个线程对象时,该线程处于新建状态,此时它具有自己的内存空间,但尚未开始运行。 2. **就绪状态**:调用`start()`方法后,线程进入就绪状态,等待CPU分配,一旦获得CPU...
总的来说,这个简单线程实例小程序是学习多线程编程和MFC线程管理的一个基础示例,它涵盖了线程的创建、执行、通信和结束等核心概念。通过实践这个小程序,开发者能够更好地理解和应用线程技术,提高程序的并发处理...
下面通过一个具体的例子来展示如何创建一个简单的线程: ```csharp using System; using System.Threading; public class ThreadExample { // 线程执行方法 public static void ThreadProc() { for (int i = 0...
### C#多线程基础详解 #### 知识点一:多线程概念与优势 在C#中,多线程是指一个程序中同时执行多个线程的能力。一个线程是程序执行的基本单位,每个线程都有自己的指令指针、栈和局部变量,但共享相同的内存空间...
总结来说,这个“Java简单程序”利用多线程技术,结合物理学知识,构建了一个能够同时模拟平抛运动和自由落体运动的系统,展现了Java在并发编程和科学计算领域的应用。通过学习和理解这个程序,开发者不仅可以深化对...
本教程将通过一个简单的实例,介绍如何在Delphi中创建和管理线程。 首先,理解线程的基本概念至关重要。在单线程应用程序中,所有操作按顺序执行,而多线程应用则可以同时处理多个任务。线程可以在后台运行,不影响...
本篇文章将详细讲解如何在 Delphi 中创建和使用多线程,以 `ThreadExample` 为例,展示一个简单的多线程应用。 1. **线程基础** - 线程是操作系统中的基本执行单元,每个线程都有自己的栈空间,共享同一进程的内存...
1. **多线程基础**: - **创建线程**:在C#中,可以使用`Thread`类创建新线程。通过构造函数传入一个委托(Action或Func)来指定线程执行的任务。 - **启动线程**:使用`Start`方法启动线程,线程将开始执行指定的...
在本项目"java,socket多线程一对一聊天"中,我们探讨的是如何使用Java的Socket库来实现一个简单的、一对一的聊天应用。由于描述中提到“暂不支持并发”,我们可以理解这个系统可能只处理单个连接,而不是同时处理多...
为了更好地理解Java多线程与并发库的实际应用,我们可以考虑一个具体的案例——使用`ExecutorService`和`Future`实现一个简单的下载文件并合并的功能。 假设我们需要从网络上下载多个小文件,并将它们合并成一个大...
### 基于Java的多线程技术应用研究 #### 摘要 ...本文详细介绍了Java多线程的基础知识、实现方法、线程状态控制、同步互斥机制以及如何避免死锁等问题,旨在为读者提供一个全面的多线程开发指南。
编写一个简单的HTTP 1.0客户端,你需要实现发送HTTP请求的方法,如GET或POST,同时理解请求头和请求体的构造。服务器端则需要解析这些请求,并返回适当的HTTP响应,包括状态码、响应头和响应体。通过此实验,你可以...
在多线程环境下,我们可以为每个客户端创建一个独立的线程来处理请求,这样可以同时处理多个客户端的连接,提高服务端的并发能力。我们可以通过创建一个`Thread`子类,重写`run()`方法来处理每个客户端的请求。 **2...
总结起来,"简单的多线程示例delphi7"这个项目提供了一个基础的多线程实现,通过TThread类创建新线程,并通过重写Execute方法来定义线程任务。开发者可以通过学习这个示例,理解如何在Delphi 7中进行多线程编程,以...
NetBeans是一个流行的Java集成开发环境(IDE),它提供了丰富的工具和功能来简化Java应用程序的开发,包括多线程应用。在本项目中,NetBeans被用作开发平台,开发者可以利用其内置的编辑器、调试器和项目管理工具来...
OpenGL(Open Graphics Library)是一种性能卓越的三维图形标准,由 SGI 等多家世界知名的计算机软件公司倡导,以 SGI 的 GL 三维图形库为基础制定的一个通用共享的开放式三维图形标准。OpenGL 是图形硬件的一个软件...
总的来说,多线程基础编程涵盖了从基本概念到实际应用的广泛内容,理解并掌握这些知识点对于编写高效、稳定的并发程序至关重要。通过思维导图的方式,我们可以更好地组织和记忆这些复杂的概念,以便在实践中灵活运用...