任何编程语言中的任何方法都在与调用者相同的线程中执行.当你调用Thread.start()时,它会在调用它的同一个线程中运行.

现在,您知道Thread的run()方法不会在与start相同的线程中执行.但那是因为start本身并不会调用run.您将不得不有关线程的信息以获得完整的图片,但只是想象一下,start只创建一个带有一些数据结构的新线程(Runnable),新创建的线程查看该数据结构,识别Runnable并执行其运行方法.

这实际上是控制从一个线程传递到另一个线程的唯一方式:一个线程生成一些数据,另一个线程拾取并处理它.控制不会从一个线程传递到另一个线程,它是线程间的通信和协调.

如果Game的方法被Server调用,那么线程就没有任何事情可做了,是吗?但相反,如果服务器不直接调用该方法,而是将该操作表示为数据,则Game.run()可以在其自己的线程中选择操作并执行它.

现在唯一的问题是服务器在哪里可以放置数据,以便在自己的线程中运行的每个Game.run()都知道从中获取数据.一种选择是使用BlockingQueue.服务器可以将这些Action对象放入队列中,Game线程可以将其拾取.这两个人如何知道使用相同的队列?有许多不同的方法,一种是服务器用队列创建游戏并在其侧面存储地图.如下面的骨架:

class Server {

Map games = ....;

void createGame() {

BlockingQueue queue = ....;

Game game = new Game(queue);

games.put(game, queue);

}

void foo() {

Game game = ....;

Action action = ....; // identify the Game

map.get(g).add(action);

}

}

class Game {

BlockingQueue _queue;

Game(BlockingQueue queue) {

_queue = queue;

}

void run() {

while (true) {

Action nextAction = _queue.take();

// perform the action

}

}

}

java runnable 使用_如何调用java Runnable对象的其他方法?相关推荐

  1. java 线程 暂停_如何实现Java线程的暂停和重新启用?

    展开全部 JAVA中线程开始有start方法,暂停用sleep(time)方法,线程停止用stop方法,线程等待wait方法,java 中没有线程重启一说,只能说线62616964757a686964 ...

  2. java 反射机制_详解Java中的反射机制的优缺点

    一.什么是反射? 对于程序员来说,应该很少需要直接使用反射工具:之所以在语言中提供它们,是为了支持其他Java特性,比如对象序列化.Java Beans以及RMI.还有就是在很多框架中,也是应用到了反 ...

  3. java uipath_10.3 UiPath如何调用Java

    调用Java方法(Invoke Java Method)的介绍 从Java Scope中的.jar加载的方法中调用指定的Java方法.并结果存储在变量中 二.Invoke Java Method 在U ...

  4. java调用el_[Java教程][javaEE] EL表达式调用java方法

    [Java教程][javaEE] EL表达式调用java方法 0 2016-07-03 18:00:03 1.新建个类,类里面定义静态方法 package com.tsh.utils;import j ...

  5. java runnable 匿名_匿名类实现Runnable接口 | 学步园

    15.2.3  使用Runnable接口 我们知道,Java中的类只能够是单继承,也就是说,如果一个类为了使用线程而继承了Thread类,它就不能再继承别的类了.这很可能给编程带来不便.本节中介绍的就 ...

  6. java runnable 异常_详解Java中多线程异常捕获Runnable的实现

    详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口 ...

  7. java lambda 反射_反射调用与Lambda表达式调用

    想调用一个方法很容易,直接代码调用就行,这人人都会.其次呢,还可以使用反射.不过通过反射调用的性能会远远低于直接调用--至少从绝对时间上来看的确是这样.虽然这是个众所周知的现象,我们还是来写个程序来验 ...

  8. java web 截图_如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

  9. 不允许使用java方式启动_细品 Java 中启动线程的正确和错误方式

    细品 Java 中启动线程的正确和错误方式 前文回顾详细分析 Java 中实现多线程的方法有几种?(从本质上出发) start 方法和 run 方法的比较 代码演示:/** * * start() 和 ...

最新文章

  1. spark2读取oracle工具类,spark读写Oracle、hive的艰辛之路(一)
  2. Android怎么访问私有数据(5)
  3. for循环执行次数_VB考试笔记之循环控制结构部分
  4. python计算股票趋势_通过机器学习的线性回归算法预测股票走势(用Python实现)...
  5. 5 计算机组成原理第四章 指令系统
  6. HTML+CSS+JS实现 ❤️人物走悬崖小游戏❤️
  7. python输出大字号汉字_Python中输出ASCII大文字、艺术字、字符字小技巧
  8. 电子电路分析与设计:数字电子技术_红外气体传感器电子电路设计
  9. 解决Windows Update时收到的0x8ddd0018错误代码
  10. 访问量中 pv uv ip的区别
  11. 树莓派保持网络连接shell脚本
  12. [ZZ]DevExpress Windows Form(1) DevExpress控件之主题
  13. 被Gartner评为十大安全技术的IAST是什么
  14. windows10 BitLocker恢复秘钥(此方法只适用于使用Microsoft账号登录系统用户)
  15. 学校计算机统一编号,华中科技大学人员编号编码管理办法
  16. windows应用启动java -jar
  17. 认识很浅的云南最后的秘境
  18. 免费域名证书最新申请方式大全
  19. 新版《红楼梦》的问题在哪儿?
  20. Cmaker 是什么

热门文章

  1. logging的理解和使用一
  2. 网络上的优美感人句子,句句掉泪!
  3. python 音乐编程,python插入音乐进行播放的方法
  4. 其实,这就是「幸存者偏差」
  5. 记hadoop集群黑名单移除节点出现问题及解决
  6. 32位PowerPC构架通用寄存器分析及总结二
  7. android监听支付宝支付成功,Andriod监听支付宝收款实现个人支付宝支付接口!附安卓App...
  8. 膜拜了,上海一90后绘制出《盗墓笔记》全套地图
  9. Mac卸载软件 CleanMyMac最好选择
  10. 查看docker空间资源的使用情况及清理空间