如何同时发生几个循环/进程/等?

时间:2013-12-02 04:08:16

标签: java events loops process action

在编码时 - 你可以使用Java作为参考/示例,因为我最熟悉它 - 你如何设法同时发生几个“行动”,不断? 我理解有足够的循环/布尔,你可以设置简单的代码来不断发生 - 基于各种输入的不同输出 - 但这不是我的意思。 据我所知,代码是相当顺序的(这很好,但我的意思是纯粹的,具体的顺序)。例如,对于某种转换计算器:请求输入,接收输入/处理错误输入,转换,显示,请求另一个转换/完成。

但是,对于更复杂的代码,我想知道如何允许同时发生各种动作/事件,或者这种情况的可能性。例如,移动应用。允许在(几乎)任何给定时间更改设置,而不是等待程序运行中的特定时间来要求更改设置。同样,视频游戏允许在任何给定时间输入,而其他动作仍在发生(例如在跳跃时移动并允许AI /敌人进行交互)。是的,代码仍然必须遵循序列,但是如何在同一程序中运行其他进程/过程时同时进行各种输入/输出或操作?

简而言之,我能想到的最好的方式来描述我的要求是: 如何在一个项目中同时运行“多个程序/代码”?

1 个答案:

答案 0 :(得分:0)

您所描述的是并发或多线程(请查看Java文档http://docs.oracle.com/javase/tutorial/essential/concurrency/或其他教程http://www.vogella.com/tutorials/JavaConcurrency/article.html)。这允许您通过使用多个核心或在活动之间快速切换来同时完成多项任务,从而产生同时性的错觉。只需几个基础...为此,您需要创建多个Thread对象,并为每个线程对象提供一个Runnable对象,该对象基本上用于告诉您想要它做什么。每个线程只能执行一次。线程也可以进入“休眠”状态,这意味着它们的执行将暂停一段时间(例如,如果你要制作一个计时器并且你需要一些东西来改变时间屏幕就像过去的每一秒。)你还应该知道线程有可能抛出异常,因此通常必须捕获​​异常。

我已将此程序编写为线程示例。它将打印出正在运行的线程,然后在唤醒之前将线程置于休眠状态,并为每个线程重复25次。

Runnable myRunnable = new Runnable() {

        public void run() {

            try {
                for (int i = 0; i < 26; i++) {
                    System.out.println(Thread.currentThread().getName()
                            + " is running.");
                    Thread.sleep(500);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    };

    Thread a = new Thread(myRunnable, "Thread one");
    a.start();
    Thread b = new Thread(myRunnable, "Thread two");
    b.start();
}

给出输出

Thread one is running.
Thread one is running.
Thread two is running.
Thread two is running.
Thread one is running.
Thread two is running.
Thread one is running.
Thread one is running.
Thread two is running.

注意每次输出是如何不同的,并且不会像通常习惯的那样从第一个线程线性地进展到两个。