0 0

Java多线程同时启动或执行15

例如一个赛车游戏,里面有10辆车,我需要他们同时动起来,这个同时很重要,要求准确性非常高,因为只有每辆台车能同时开动,才算公平。

每辆车用一个线程表示,那么,这10个线程如何保证“同时启动、执行、唤醒...等等”的准确性呢?

请各位给出实现或思路,尤其是开发游戏的javaeyer...
问题补充:
补充一下:

以下方法显然不行:
new CarThread().start();
new CarThread().start();
new CarThread().start();
...
...

有先后顺序的话就保证不了准确性。

----------我要隔开我要隔开----------

aninfeel所回答的同样有问题:
aninfeel 写道
全部车子线程启动后使用wait(),然后使用notifyAll大家一起开动
class CarThread{  
   public void run()  
   {  
      //大家一起在这里等。  
      synchronized(waitObj){  
           waitObj.wait();  
      }  
      //开始比赛  
      ..........  
   }  
}  
  
//大家一起跑  
waitObj.notifyAll();  


原因,Object.notifyAll()的javadoc说的很清楚。
javadoc 写道

The awakened threads  will compete in the usual manner with any other threads that might  be actively competing to synchronize on this object; for example, the awakened threads enjoy no reliable privilege or disadvantage in being the next thread to lock this object.

问题补充:
继续补充一下:

没有看明白"墓里活人"的100毫秒10毫秒的回答....
2008年12月16日 17:22

8个答案 按时间排序 按投票排序

0 0

采纳的答案

其实  你没必要让线程一起启动,除非你有这么多的CPU 理论上是不行的。

你在乎的就是时间,靠时间去判断,你可以在线程启动的时候设置一个开始时间,结束的时候一个结束时间。当然你的显示方式要能欺骗玩游戏的人。

2008年12月22日 03:37
0 0

用CountDownLatch

2014年9月11日 12:15
0 0

其实只要使用闭锁的实现就可以了啊CountDownLatch。
使用CountDownLatch signal = new CountDownLatch(1);
在线程中run方法使用signal.await()方法,然后需要启动是使用signal.countDown();

2014年9月05日 16:21
0 0

"每辆台车能同时开动,才算公平" 是不现实的。因为实际上所谓的线程并发执行在微观上也是每个线程分一个小时间片,一个一个顺序执行。
换个角度,假设有一个方法可以同时启动所有的线程,线程启动后谁先执行也是由cpu决定。所以,所谓的公平应该是:各辆车启动的间隔尽可能小,并且启动顺序是随机的。

2008年12月23日 17:40
0 0

楼主应该先去研究下 java 的多线程,有点概念后再来讨论就容易很多。我来帮 墓里活人 解释下。

首先, 从技术上来说,严格意义上的同时启动是做不到的,除非你有多个cpu.
在大多数只有一个cpu的电脑上, 微观上同一时间内只有一个线程能运行。 那个为了达到近似你所要求的效果,可以采用变通的方法。

举例如下
你有10台赛车,这次赛车一共要持续10分钟。 但是只有一个cpu就类似只有一个赛道。 那怎么办呢? 可以每次每辆赛车跑10分钟。 然后换车。

为了做的更平滑点,可以每次每辆车跑1分钟,然后换车。

墓里活人  的解释就是这个意思。

不过在具体java 编程中,这个要求比较难实现, 因为java的线程调度的具体实现是依赖操作系统的。 我建议你可以换一种思路,就是每隔一分钟挨个计算一下各个车的位置。这种做法应该更实际。



2008年12月17日 15:00
0 0


楼上的回答是正确的, 但是没有精确的东西。 除非你有32个CPU的系统, 哈哈啊哈

2008年12月16日 23:43
0 0

那你只能控制 10个线程 cup分配的运行时间了。

10个线程时间类。 规定在 多少多少毫秒内为一单位~

比如100毫秒。

哪么100毫秒内,10个线程每个应分配得10豪秒的运行时间。

在100豪秒内,有个别线程占用的大部分CUP时间。所以你可以写一个控制类
控制100毫秒内 每一条线程必须执行到10毫秒。才保证公平,
下一轮是另一个100毫秒开始。

如果你想高精确度的话 哪么可以调当前的100毫秒时间单位,改成更小的时间。

2008年12月16日 19:30
0 0

全部车子线程启动后使用wait(),然后使用notifyAll大家一起开动

class CarThread{
   public void run()
   {
      //大家一起在这里等。
      synchronized(waitObj){
           waitObj.wait();
      }
      //开始比赛
      ..........
   }
}

//大家一起跑
waitObj.notifyAll();

2008年12月16日 18:15

相关推荐

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    Java多线程--等待所有子线程执行完的五种方法.docx

    在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...

    汪文君JAVA多线程编程实战(完整不加密)

    Java多线程允许程序同时执行多个独立的代码段,这在处理大数据、网络通信、用户界面更新等场景中尤其有用。书中详细介绍了Java多线程的核心概念,如线程的创建、启动、同步、协作以及生命周期管理。读者将学习如何...

    Java多线程实现异步调用实例

    总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    JAVA多线程练习题答案。

    JAVA多线程练习题答案详解 在本文中,我们将对 JAVA 多线程练习题的答案进行详细的解释和分析。这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等...

    多线程并行执行,汇总结果

    多线程并行执行是指在同一个程序中同时运行多个线程,每个线程负责不同的任务,以实现任务的并发执行。这种技术可以充分利用多核处理器的优势,将CPU的计算能力最大化,从而提高程序的运行效率。在Java中,可以通过...

    Java 多线程 PPT

    Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关概念、线程类和接口的使用,以及线程的同步与互斥。 首先,我们需要理解进程与...

    JAVA多线程编程技术PDF

    这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点。 首先,多线程的核心概念包括线程的创建与启动。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。创建后...

    Java多线程技术精讲

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...

    JAVAJAVA多线程教学演示系统论文

    《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    java多线程示例

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...

    java多线程课件

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的并发性和效率。在Java中,线程是程序执行的基本单元,是轻量级的进程,它们共享同一份代码和数据空间,但每个线程有自己的栈和程序...

    java 多线程课件

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应速度。在Java中,多线程支持是语言级别的,这意味着开发者可以轻松地创建和管理并发执行的线程。 首先,我们要理解...

    Java实现的两个线程同时运行案例

    Java多线程编程实现两个线程同时运行案例 Java多线程编程是Java编程中的一种重要技术,用于实现多任务并发执行,提高程序的执行效率和响应速度。在本文中,我们将介绍如何使用Java实现两个线程同时运行的案例,涉及...

Global site tag (gtag.js) - Google Analytics