一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的。
在进程中,有些程序流程块是可以乱序执行的,并且这个代码块可以同时被多次执行。实际上,这样的代码块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候,这样的执行模式成为并发执行。
Java语言对多线程的支持通过类Thread
// 主线程其它代码段
ThreadClass subThread = new ThreadClass();
subThread.start();
// 主线程其它代码段
subThread.sleep(1000);
前些天用线程打算做一个打飞机的游戏,苦于技术限制,还没做好,只做了飞机在天上飞的效果。
定义一个主类MainWindow,用来实现窗体和调用主函数
package cn.gyw.study0412;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JFrame;
public class MainWindow extends JFrame {
public void initUI() {
this.setTitle("sss");
this.setSize(1000, 800);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setVisible(true);
final Graphics g = this.getGraphics();
final ArrayList<Animle> shapes = new ArrayList<Animle>();
AnSky as = new AnSky(g, 0, 0, "images/sky.png");
shapes.add(as);
AnPlane ap_1 = new AnPlane(g, 50, 100, "images/plane.png");
AnPlane ap_2 = new AnPlane(g, 50, 200, "images/plane.png");
AnPlane ap_3 = new AnPlane(g, 50, 300, "images/plane.png");
AnPlane ap_4 = new AnPlane(g, 50, 400, "images/plane.png");
shapes.add(ap_1);
shapes.add(ap_2);
shapes.add(ap_3);
shapes.add(ap_4);
ThreadDraw td = new ThreadDraw(shapes);
td.start();
MouseListener ml = new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
AnBullet ab = new AnBullet(g, x, y);
shapes.add(ab);
}
};
this.addMouseListener(ml);
}
public static void main(String[] args) {
MainWindow mw = new MainWindow();
mw.initUI();
}
}
以为打飞机游戏的时候会出现很多飞机、子弹之类的图形元素,但是他们大都数都具有一样的特点,比如形状和如何移动,所以在做项目的时候可以定义一个接口Animel,方便管理
package cn.gyw.study0412;
public interface Animle {
public void draw();
public void move();
}
这样在实现时就可以根据需要定义一个类来继承接口,比如我要实现飞机类,就可以定义AnPlane类
package cn.gyw.study0412;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
public class AnPlane implements Animle {
private int x, y;
private Graphics g;
private Image imPng;
public AnPlane(Graphics g,int x, int y,String pngFileName){
this.g=g;
this.x=x;
this.y=y;
ImageIcon ic= new ImageIcon(pngFileName);
imPng=ic.getImage();
}
public void draw() {
g.drawImage(imPng, x, y, 80, 80, null);
}
public void move() {
x = x + 50;
}
}
构造方法传入画笔对象和需要画一架飞机的坐标,同时我们可以把需要画的对象的地址以字符串的形式存储在构造方法中,这样初始化对象的时候就更方便了。
这样还不行,画出的飞机和子弹都是连续的,看不出飞机子弹什么的在天上飞行的场景,为了解决这个问题,我们可以让背景图片也休眠,这样看起来就有了动态的感觉。
为了存储我们需要加上的图形元素,我们可以用系统自带的链表来存储,当然也可以用自己以前写的链表队列,在MainWindow类中已经贴出来了。
相关推荐
《多线程游戏——Snake贪吃蛇》 贪吃蛇是一款经典的计算机游戏,它通过简单的规则和直观的操作,吸引了无数玩家。在Java编程语言中实现贪吃蛇游戏,我们会涉及多线程技术,这是理解并发处理和提升程序性能的关键...
例如,在游戏服务器中,用户A和B的操作可以在各自的线程中独立处理,避免了数据竞争。通过将任务分配到不同的任务队列,可以实现更精细的并行化。 5. 连接池与异步回调 数据库连接池是一种有效的资源管理策略,通过...
总结起来,这个项目是一个使用C#开发的多线程桌面游戏,通过委托实现事件处理,使用鼠标钩子增加交互性,并通过某种形式的AI赋予小球智能行为。开发者通过这个游戏实例来学习和实践多线程编程和委托机制,同时也展示...
总结起来,VB游戏修改器多线程是通过VB语言实现的高效游戏数据修改工具,其核心在于利用多线程技术提高修改速度和稳定性。开发者通过合理运用多线程和线程同步机制,实现了在不影响用户界面响应的前提下,对游戏数据...
总结来说,"C#线程使用大炮打飞机"项目是一个学习多线程编程的好例子。它涉及到线程的创建、同步、通信和异步编程,这些都是C#开发者必备的基础技能。通过实际编写这样的程序,可以深入理解线程如何在并发环境中协同...
总结起来,"Java Swing 赛马小游戏 线程实例"涵盖了以下关键知识点: 1. Java Swing组件的使用,包括布局管理、事件监听和用户交互。 2. Java多线程的概念,如何创建和控制线程。 3. 线程同步和通信,如...
总结,通过这个C#线程实现的字母打字游戏,我们可以学习到线程的创建、通信、同步和管理,这些都是多线程编程中的基础且重要的知识点。通过实践这些概念,开发者能够更好地理解和应用线程,提升软件的性能和用户体验...
7. **总结** 检测线程状态是多线程编程中必不可少的技能,它能帮助我们理解和解决与并发相关的问题。无论是通过API、日志还是调试工具,掌握线程状态的检查方法都将极大地提高我们的编程能力。理解并熟练运用这些...
# C++多线程编程总结及实例讲解 在C++程序开发过程中,为了提升程序的吞吐量、并发性和实时响应能力,采用多线程技术是常见且有效的手段之一。本文将围绕“C++-多线程编程总结-实例讲解”这一主题,深入探讨多线程...
例如,一个线程负责渲染,另一个线程负责处理用户的输入和更新游戏逻辑。为了确保线程安全,需要使用锁(如`CRITICAL_SECTION`)或者Windows的`Mutex`对象来保护共享数据,防止同时访问。 压缩包中的文件可能包含了...
总结来说,"C++在多线程中使用mciSendString播放音乐demoB"展示了如何结合C++的多线程特性与Windows MCI服务来实现非阻塞的音乐播放。这涉及创建线程,定义线程函数,以及正确使用mciSendString函数发送播放命令。...
总结来说,实现"java多线程实现乒乓球双打"需要对Java的线程API有深入的理解,包括线程的创建与启动、同步与通信机制、并发控制工具的使用以及设计模式的应用。通过这种方式,我们可以构建出一个生动有趣的模拟游戏...
总结来说,“天谕手游”的多线程框架是其运行效率和稳定性的重要保障,通过合理的线程管理和资源调度,实现了游戏的高性能运行。开发者可以通过分析压缩包内的文件,学习到如何在实际项目中应用多线程技术,提高自己...
总结,本资料“C#多线程学习代码资料”会涵盖这些知识点,并通过示例代码帮助初学者理解多线程的创建、同步、通信以及异常处理等概念,是学习C#多线程编程的良好起点。通过深入学习和实践,开发者能够更好地掌握多...
总结来说,这个项目为学习C#和多线程提供了很好的实践机会。初学者可以通过研究代码,理解如何在WinForm环境中设计用户界面,如何利用多线程来提高程序性能,以及如何实现一个简单的打字游戏。这不仅可以加深对C#...
在IT领域,多线程编程是一项关键技能,尤其是在性能要求高的应用中,如服务器软件、游戏引擎或实时数据处理系统。C++作为一种强大的系统级编程语言,提供了丰富的工具和技术来支持多线程编程。本指南将深入探讨多...
总结来说,这个Java实现的贪吃蛇游戏充分展示了Java编程的灵活性和实用性,通过多线程技术确保了游戏的实时性和交互性,而基础的网络编程元素则为未来的扩展和多人游戏提供了可能。对于学习Java的开发者,这是一个很...
总结起来,这个“Java飞机大战小游戏”不仅是一个娱乐项目,更是一个学习Java编程、数据库操作和网络通信技术的理想实践案例。通过这个项目,开发者可以深入理解Java的面向对象编程、事件驱动、JDBC、Socket编程以及...
- **游戏开发**: 分离渲染线程和逻辑线程,提升游戏体验。 #### 五、示例分析 下面通过一个简单的示例——`Counter1`,来具体了解如何在Java中实现多线程以及构建反应灵敏的用户界面。 ##### 5.1 Counter1 示例...
在Unity引擎中,C#是主要...总结,虽然C#提供了丰富的线程管理功能,但在Unity中使用时需要特别注意线程安全和与Unity主循环的交互。理解这些概念并适当应用它们,可以帮助你在Unity项目中实现高效且稳定的多线程代码。