`
hwfantasy
  • 浏览: 20918 次
  • 性别: 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
分享到:
评论

相关推荐

    java线程 线程学习资料 java线程教程

    java线程 线程 教程 java线程教程 java线程学习资料 本教程有什么内容? 本教程研究了线程的基础...学习完本教程之后,您应该可以编写一个使用线程的简单程序。您还应该可以阅读并理解以简单方 法使用线程的程序。

    Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用

    Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用   目录 Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 一、简单介绍 二、能学到 三、实现思路 四、效果...

    多线程案例

    首先我要提一点,关于线程的基础知识,一个程序,即一个进程,可以有很多个线程,当然,至少要有一个线程,即主线程.相信大家都知道多线程的好处吧,举个书上的例子 吧,Windows在复制文件的时候,有个动画,是在复制文件过程中...

    解析Java的多线程机制

    而Java应用程序中的多线程则是共享同一应用系统资源的多个并行代码执行 体,线程之间的通信和协调方法相对简单。 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式...

    java线程基础讲解

    本教程研究了线程的基础知识 — 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用程序的基本构件 — 如何在线程之间交换数据、如何控制 线程以及线程如何...

    《Windows多线程编程技术与实例》-郝文化-书和源码

    本书每一章都从简单的多线程实例出发逐渐深入,紧紧围绕应用程序实例,向读者展示了利用多线程技术来编写高效、友好的Windows应用程序的方法,并对常用的Win32线程函数进行了深入详细的说明。本书共分8章,第l章介绍...

    java线程初解

    本教程有什么内容? 本教程研究了线程的基础知识 — 线程是什么、线程为什么有用以及怎么开始编写使用...学习完本教程之后,您应该可以编写一个使用线程的简单程序。您还应该可以阅读并理解以简单方 法使用线程的程序。

    JAVA线程简介(多线程)

    本教程研究了线程的基础知识 — 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单程序。 &lt;br&gt;我们还将研究更复杂的、使用线程的应用程序的基本构件 — 如何在线程之间交换数据、如何控制线程以及线程...

    java线程学习

    本教程有什么内容? 本教程研究了线程的基础知识 — 线程是什么、线程为什么有用以及怎么开始编写使用...学习完本教程之后,您应该可以编写一个使用线程的简单程序。您还应该可以阅读并理解以简单方 法使用线程的程序。

    java线程

    程研究了线程的基础知识— 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用程序的基本构件— 如何在线程之间交换数据、如何控制 线程以及线程如何互相通信...

    Windows多线程编程技术与实例.pdf

    本书每一章都从简单的多线程实例出发逐渐深入,紧紧围绕应用程序实例,向读者展示了利用多线程技术来编写高效、友好的Windows应用程序的方法,并对常用的Win32线程函数进行了深入详细的说明。本书共分8章,第l章介绍...

    第12章Qt5多线程

    本书以Qt 5作为平台,每个章节在简单介绍开发环境的基础上,用一个小实例,介绍Qt 5应用程序开发各个方面,然后系统介绍Qt 5应用程序的开发技术,一般均通过实例介绍和讲解内容。最后通过三个大实例,系统介绍Qt 5...

    C#网络应用高级编程

    1.1.3 在一个线程中操作另一个线程的控件 1.2 IP地址与端口  1.2.1 TCP/IP  1.2.2 IPAddress类与Dns类  1.2.3 IPHostEntry类  1.2.4 IPEndPoint类  1.3 套接字  1.3.1 Socket类  1.3.2 ...

    java线程.pdf

    本教程研究了线程的基础知识— 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用程序的基本构件— 如何在线程之间交换数据、如何控制 线程以及线程如何互相...

    《Delphi 深度编程及其项目应用开发》PDF书及代码

    8.3.3 远程抓屏示例 8.4 通讯中间件的制作 8.4.1 磁盘队列的实现 8.4.2 客户端和服务器端发送接收磁盘队列数据的套接字的建立 8.4.3 中间件的简单应用 第9章 串口编程 9.1 串口通信的基础知识 9.1.1 同步通信和异步...

    C++_p2p实现多线程文件传输

    作为一个程序员,使用这些现有的协议传送 文件相当简单,不过,它们只适用于服务器模式中。这样,当我们想在点与点之间传送文件就不适用了或相当麻烦,有一种大刀小用的意味。笔者一直想寻求一种简 单有效,且具备多...

    Java线程教程(详解java线程使用) pdf.rar

    Java线程教程(详解java线程使用) pdf,主要研究了线程的基础知识线程是什么、线程为什么有用以及怎么开始编写使用线程的简单程序。还将研究更复杂的、使用线程的应用程序的基本构件——如何在线程之间交换数据、...

    Java面试整理,涵盖基础、JVM、线程并发、框架、MySQL、微服务、Redis、中间件、数据结构与算法等。陆续完善中.zip

    它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run ...

    线程基础知识-必知必会

    文章目录什么是线程,什么是进程?什么是并发,什么是并行?线程有哪几种状态?...它表示运行中的程序 打开电脑的管理控制台,看到的运行的应用程序就是一个个进程! 线程:是进程中的一个实例,作为系统调

Global site tag (gtag.js) - Google Analytics