`
hwfantasy
  • 浏览: 21683 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

线程基础和一个简单应用

 
阅读更多
  今天学习的是线程的有关知识。在了解线程之前我们应该先了解进程是什么,进程就是进程是操作系统结构的基础,是一个正在执行的程序。而线程则是包含在进程之中的,线程之间可以交互数据,且一个进程中可以包含多个线程。
  单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。而多线程程序则不然,它只会先通知一个线程开始执行,然后再依次通知下一个,并不会理会线程是否完成。
  要使一个程序实现线程有两种方法:一种方法是将类声明为 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. **多线程的概念**:多线程是指在一个程序中同时执行多个不同的线程,每个...

    进程与线程的一个简单解释

    然而,一个进程内部可以包含多个线程,这些线程共享同一份进程资源,如内存空间。 线程则是执行的最小单元,它是在进程中执行的一条指令序列。相比进程,线程创建和销毁的成本较低,因为它们共享同一进程的内存空间...

    多线程编程一个简单示例轻松入门

    #### 多线程基础概念 在计算机科学中,**多线程**是一种让单个程序执行多个任务的技术。每个任务被称为一个“线程”,它们可以并行地执行,从而提高程序的效率和响应性。多线程技术广泛应用于各种操作系统和应用...

    线程及多线程技术及应用 fly

    1. **新建状态**:当使用`new`关键字创建了一个线程对象时,该线程处于新建状态,此时它具有自己的内存空间,但尚未开始运行。 2. **就绪状态**:调用`start()`方法后,线程进入就绪状态,等待CPU分配,一旦获得CPU...

    一个简单的线程实例小程序

    总的来说,这个简单线程实例小程序是学习多线程编程和MFC线程管理的一个基础示例,它涵盖了线程的创建、执行、通信和结束等核心概念。通过实践这个小程序,开发者能够更好地理解和应用线程技术,提高程序的并发处理...

    在C#中编写多线程应用程序

    下面通过一个具体的例子来展示如何创建一个简单的线程: ```csharp using System; using System.Threading; public class ThreadExample { // 线程执行方法 public static void ThreadProc() { for (int i = 0...

    C#多线程基础

    ### C#多线程基础详解 #### 知识点一:多线程概念与优势 在C#中,多线程是指一个程序中同时执行多个线程的能力。一个线程是程序执行的基本单位,每个线程都有自己的指令指针、栈和局部变量,但共享相同的内存空间...

    Java简单程序(多线程的应用)

    总结来说,这个“Java简单程序”利用多线程技术,结合物理学知识,构建了一个能够同时模拟平抛运动和自由落体运动的系统,展现了Java在并发编程和科学计算领域的应用。通过学习和理解这个程序,开发者不仅可以深化对...

    delphi线程简单实例

    本教程将通过一个简单的实例,介绍如何在Delphi中创建和管理线程。 首先,理解线程的基本概念至关重要。在单线程应用程序中,所有操作按顺序执行,而多线程应用则可以同时处理多个任务。线程可以在后台运行,不影响...

    Delphi 中多线程应用的简单范例

    本篇文章将详细讲解如何在 Delphi 中创建和使用多线程,以 `ThreadExample` 为例,展示一个简单的多线程应用。 1. **线程基础** - 线程是操作系统中的基本执行单元,每个线程都有自己的栈空间,共享同一进程的内存...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    1. **多线程基础**: - **创建线程**:在C#中,可以使用`Thread`类创建新线程。通过构造函数传入一个委托(Action或Func)来指定线程执行的任务。 - **启动线程**:使用`Start`方法启动线程,线程将开始执行指定的...

    java,socket多线程一对一聊天

    在本项目"java,socket多线程一对一聊天"中,我们探讨的是如何使用Java的Socket库来实现一个简单的、一对一的聊天应用。由于描述中提到“暂不支持并发”,我们可以理解这个系统可能只处理单个连接,而不是同时处理多...

    Java多线程与并发库高级应用

    为了更好地理解Java多线程与并发库的实际应用,我们可以考虑一个具体的案例——使用`ExecutorService`和`Future`实现一个简单的下载文件并合并的功能。 假设我们需要从网络上下载多个小文件,并将它们合并成一个大...

    基于Java的多线程技术应用研究

    ### 基于Java的多线程技术应用研究 #### 摘要 ...本文详细介绍了Java多线程的基础知识、实现方法、线程状态控制、同步互斥机制以及如何避免死锁等问题,旨在为读者提供一个全面的多线程开发指南。

    编写简单的HTTP 1.0客户端/服务器程序:.编写多线程Web服务器:编写简单的RMI程序

    编写一个简单的HTTP 1.0客户端,你需要实现发送HTTP请求的方法,如GET或POST,同时理解请求头和请求体的构造。服务器端则需要解析这些请求,并返回适当的HTTP响应,包括状态码、响应头和响应体。通过此实验,你可以...

    java的UDP多线程服务端和简单客户端

    在多线程环境下,我们可以为每个客户端创建一个独立的线程来处理请求,这样可以同时处理多个客户端的连接,提高服务端的并发能力。我们可以通过创建一个`Thread`子类,重写`run()`方法来处理每个客户端的请求。 **2...

    简单的多线程示例delphi7

    总结起来,"简单的多线程示例delphi7"这个项目提供了一个基础的多线程实现,通过TThread类创建新线程,并通过重写Execute方法来定义线程任务。开发者可以通过学习这个示例,理解如何在Delphi 7中进行多线程编程,以...

    一客户一线程通信

    NetBeans是一个流行的Java集成开发环境(IDE),它提供了丰富的工具和功能来简化Java应用程序的开发,包括多线程应用。在本项目中,NetBeans被用作开发平台,开发者可以利用其内置的编辑器、调试器和项目管理工具来...

    一个简单的OpenGL多线程渲染模型

    OpenGL(Open Graphics Library)是一种性能卓越的三维图形标准,由 SGI 等多家世界知名的计算机软件公司倡导,以 SGI 的 GL 三维图形库为基础制定的一个通用共享的开放式三维图形标准。OpenGL 是图形硬件的一个软件...

    多线程基础个人总结思维导图

    总的来说,多线程基础编程涵盖了从基本概念到实际应用的广泛内容,理解并掌握这些知识点对于编写高效、稳定的并发程序至关重要。通过思维导图的方式,我们可以更好地组织和记忆这些复杂的概念,以便在实践中灵活运用...

Global site tag (gtag.js) - Google Analytics