Java Robot类是否在自己的线程中运行?

Java Robot类是否在自己的线程中运行?,java,multithreading,awtrobot,Java,Multithreading,Awtrobot,在这本书中,我没有看到任何关于机器人延伸线程的内容。然而,我确信我听到人们说机器人是按照自己的思路运行的 那么,Robot的每个实例是在自己的线程中运行,还是所有Robot实例都在一个线程中运行,或者它们都只是在当前线程中运行?Robot类在当前线程中运行。中没有启动线程的内容。您也可以很容易地验证它,只需在Eclipse中运行此程序,并在Debug视图中查看线程: List<Robot> robots = new ArrayList<Robot>(); for (int

在这本书中,我没有看到任何关于机器人延伸线程的内容。然而,我确信我听到人们说机器人是按照自己的思路运行的


那么,Robot的每个实例是在自己的线程中运行,还是所有Robot实例都在一个线程中运行,或者它们都只是在当前线程中运行?
Robot
类在当前线程中运行。中没有启动
线程的内容。您也可以很容易地验证它,只需在Eclipse中运行此程序,并在Debug视图中查看线程:

List<Robot> robots = new ArrayList<Robot>();
for (int i = 0; i < 10; i++) {
    robots.add(new Robot());
}
Thread.sleep(60000);
List robots=new ArrayList();
对于(int i=0;i<10;i++){
添加(新机器人());
}
睡眠(60000);

查看Robot.java的第129行:
peer=((组件工厂)工具包)它不扩展
线程
,因为它很可能由JVM处理itself@Yanick,这让我很困惑,因为这会使整个应用程序处于休眠状态,不是吗?
Robot
类不触发特定于设备的事件,因此不需要线程化,因此在同一线程中运行。此外,它不直接获取设备状态,而是使用JVM工具包实现返回的
RobotPeer
实例(很可能)。底层实现依赖于操作系统,但我不谈这个话题了。底线是,
Robot
类没有自己的线程,而是向OS事件队列注册一个对等方,以通知感兴趣的设备事件,哪个通知发生在它自己的线程中。@Yanick这是否意味着robot.delay会休眠,例如,当robot在同一线程中创建时,接口处理也会休眠?
robot.delay(ms)
是Thread.sleep(ms)的快捷方式(即与
完全相同)。它不会让所有的东西都进入睡眠状态,而是让调用线程进入睡眠状态!在多线程环境中,创建线程通常不是唯一的调用线程;实际上不止一个线程可以调用robot.delay(ms)
同时执行,但方法是同步的(即独占的,使用
Thread.sleep(ms);
)。该方法或多或少只是为了提供一个一致的接口,并在提取设备状态之前允许感兴趣线程中的延迟(即让JVM接收OS通知)。当使用robot.delay延迟robot时,这会使java应用程序休眠吗?因为我相信它调用了thread.sleep?它将休眠您从中调用的当前线程
robot.delay()。如果当前线程是主线程,它将暂停应用程序。
Thread.sleep()
调用
Robot
是一个可以从任何地方调用的静态方法。