1.在java中只要生成线程并启动即可。实现代码如下:

Thread   myThread=new Thread();

myThread.start();

当生成线程后就要调用Thread的 run()方法。但其实它什么也不干,如果想让run()方法干点事,有三种基本方法。

(1)扩展Thread类

对线程指定任务的第一个方法就是扩展Thread类,覆盖其中的run()方法。

例子:public class myThread extends Thread{

public void run(){

{ System.out.println("Do something cool here");

}

}

myThread thread=new myThread();

thread.start();

(2)实现Runnable接口

扩展Thread类很简单但是不会为了启动线程而写一个新类的,必定实现类扩展也需要运行一个线程来操作。下面是实现Runnable()接口来对线程指定任务。实现代码如下:

public class MyClass extends SomeOtherClass implements Runnable{

public MyClass(){

Thread thread=new Thread(this);

Thread.start();

}

public void run(){

System.out.println("Do something cool here");

}

}

代码中MyClass的构造函数启动一个新线程,而Thread类的构造函数会引用一个Runnable对象作为参数,这个

Runnable对象就是启动线程执行的任务。

(3)使用匿名内类

假如不能生成新类或不便实现Runnable接口,那么就可以使用匿名内类来对线程指定任务,实现代码如下:

new Thread(){

public void run(){

System.out.println("Do something cool here");

}

}.start();

2.等待线程完成

若让当前线程去等待另一个线程,则可以使用join()方法,实现如下:

myThread.join();

join()方法应用于玩家退出游戏时,它可以保证在游戏中所有的线程运行完后,再进行最后清理工作。

线程休眠:Thread.sleep(1000);

3.线程同步

通过关键字synchronized来实现同步问题。实现方法进行同步,则一次只能运行一个方法。

例子:

public class  Maze{

private int playerX;

private int playerY;

public  synchronized boolean isAtExit(){

return(playerX==0&&playerY==0);

}

public synchronized void setPositon(int x,int y){

playerX=x;

playerY=y;

}

}

除了将方法同步之外,还具有将对象同步。例如以上代码可以如下:

public synchronized class Maze{

private int playerX;

private int playerY;

public void boolean isAtExit(){

isAtExit(this){

return (playerX==0 &&playerY==0);

}

}

public void setPosition(int x,int y){

setPosition(this){

playerX=x;

playerY=y;

}

}

4.使用wait()与notify()

假设两个线程需要交互交流信息,设线程A 等待线程B发一个消息,实现代码如下:

//Thread A

public void waitForMessage(){

while(hasMessage==false){

Thread.sleep(100);

}

}

//Thread B

public void setMessage(String message){

.......

hasMessage=true;

}

虽然方案可行,但是非常苯,因为线程A每100毫秒就要检查线程B是否发送消息。若线程A睡过头,将可能太迟得到消息。另外几个线程等一个消息呢?

更好的方法是线程A保持闲机,在线程B发消息时通知线程A。wait()和notify()方法提供了这个功能。

下面是线程A等待线程B发送一个消息的代码;

//Thread A

public synchronized void waitForMessage(){

try{ wait();

}

catch(InterruptedException ex){}

}

//Thread B

public synchronized void setMessage(string message){

......

notify();

}

可以看出,线程B调用notify()方法并离开同步方法后(释放this锁)。线程A取得锁并完成同步代码快。

如果线程一直未收到通知,则等于让线程休息指定时间量,但是无法判断线程是超时返回还是收到了通知。另一个方法notify(),它通知等待同一锁的所有线程。

java的线程:所有图形应用程序都有至少两个运行代码的线程,主线程和AWT事件派生线程。

主线程就是程序的"主"线程,他用程序主类的main()方法开始执行。AWT事件派生线程处理用户输入事件,如鼠标单击,键击和窗口缩放等。下面列举一些需要使用线程的情形:从本地文件系统中装入大量文件

进行任何网络通信时,如将高分成绩发送到服务器中;进行任何海量计算时,如生成地形。

简单的java游戏编程代码_java游戏编程(1)线程相关推荐

  1. java服务端代码_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  2. java2d游戏代码_JAVA游戏编程学习笔记(三)Java 2D游戏底层绘图框架

    前二篇记录了java如何绘制图形与动画,今天打算总结复习一下,把这些知识点集合起来,制作一个Java2D小游戏框架(暂且这么叫,好像挺牛逼似的!). Java AWT 下边提供一个 class Can ...

  3. java语言简单代码_java语言编程如何实现一个最简单程序?

    在编程语言中,实践出结果是最重要的,其他的什么都是为此做准备,下面我们就来看看该如何编译一个最简单的java程序. 首先,启动你的编程软件,如eclipse等,具体可以网上了解, 再来,创建一个新的j ...

  4. java贪吃蛇代码_java实现贪吃蛇游戏代码(附完整源码)

    先给大家分享源码,喜欢的朋友点此处下载. 游戏界面 GUI界面 java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing控件 创建一个新窗口 JFrame frame = ...

  5. java游戏服务端_JAVA游戏服务端的速度比得上c++吗?

    看你要做什么游戏 有一类游戏叫益智休闲类游戏,就是用php做服务器都没问题,何况java 现在热门的吃鸡类游戏,官方钦定UE4,UE4自带服务器,跟客户端一样是C++ 另外就是各类mmo游戏,这类游戏 ...

  6. java运用网络编程技术代码_Java 网络编程

    java网络编程 1.什么叫计算机网络? 由不同地理位置的不同计算机主机,连接起来组成的网络. 2.什么叫网络编程? 在网络的基础上,使用网络进行编程,对应用层进行设计的活动. 3.网络编程三要素:I ...

  7. java并发编程实践_Java并发编程实践如何正确使用Unsafe

    一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...

  8. Java并发基础总结_Java并发编程笔记之基础总结(二)

    一.线程中断 Java 中线程中断是一种线程间协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是需要被中断的线程根据中断状态自行处理. 1.void interrupt() 方法:中断线 ...

  9. java并发数据共享机制_Java并发编程:核心理论之数据共享性

    原标题:Java并发编程:核心理论之数据共享性 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密,这 ...

  10. java并发编程介绍_java并发编程《一》介绍

    1,并发的简短历史 1,OS的发展使多个程序同时运行,程序在各自的进程(process)中运行:相互分离,各自独立执行,有OS来分配资源,比如内存,文字句柄,安全证书.如果有需要的话,进程会通过一些原 ...

最新文章

  1. 别在迷恋正则表达式解析html了,好吗?
  2. java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
  3. java batch_Java EE 7 Batch中传递属性/参数的2种方式
  4. /dev/fb0入门练习
  5. 封条格式用word怎么打_标书密封条格式全word.doc
  6. 域环境下文件服务器,域和文件服务器
  7. C++中动态定义一维数组,二维数组,三维数组的方法
  8. 【Flink】 Flink 应用资源分配问题排查思路
  9. Android开源框架Afinal第一篇——揭开圣女的面纱
  10. Mariadb----字符类型 (五)
  11. 下载文件HTTP请求及处理过程
  12. 黑莓7290无信号问题
  13. 名利双收的公益创业,“汇新杯”响应时代召唤助力公益创业
  14. mt4双线macd_手机版MT4双线MACD设置视频教程
  15. 商旅信用卡(多重继承)
  16. 怎样使用计算机操作,鼠标操作怎么用?电脑鼠标操作图文教程
  17. ev4视频转换为mp4工具使用教程
  18. 2022卡塔尔世界杯来了,谁是你心中的夺冠热门球队?
  19. loaderrunner11.00安装与破解
  20. python 英语分词是什么意思_英语里面现在分词是什么意思

热门文章

  1. 技术状态管理(四)-技术状态控制
  2. 关于rdp wrapper的not supported、not listening问题的可能解决办法
  3. 合同管理系统主要增加了安全性,对于大型企业作用重大
  4. TS合并TS文件解码TS文件解密TS解码工具
  5. tcpudp测试工具的使用,串口转wifi模块udp测试
  6. python 白盒测试_白盒测试方法
  7. Linux虚拟机的安装与创建【超详细】【手把手教学】
  8. 7种常用的数据标注工具
  9. Python 好玩代码
  10. 免费字体下载预览,这几款字体非常冷艳动人。