小编DSF*_*DSF的帖子

离散事件模拟中的时钟

我正在为我的离散事件模拟开发一个时钟类.我已经在PriorityQueue中保存了事件,因此根据哪个事件具有最近的事件时间进行排序.然而,有一件事我无法理解.在我读过的关于离散事件模拟的论文中,明确指出时钟从事件跳转到事件,因此没有必要有一个"滴答"的时钟.

但是如何工作,我有一个EventScheduler类,它将事件保存在PriorityQueue中.所以在确定下一个事件的时间之后,我可以在Clock中调用一个"setTime"方法,EventScheduler会在下一个事件的给定时间内调用它吗?但那么它永远不会真正作为一个时钟运行它只会继续跳到下一个事件?

我认为时钟运行(滴答),然后它知道EventScheduler何时发生事件,当时钟到达那个时间时,它处理事件,更新系统状态并可能生成输出事件.

很抱歉有点不清楚,但我只是对时钟如何工作的任何提示感兴趣,它是否记录,然后只在事件发生时"做"事情或者只是从事件跳到事件?

你也建议我可以使用java中的任何内置功能吗?例如Timer类

java simulation scheduling timer clock

2
推荐指数
1
解决办法
1499
查看次数

while循环中的线程是否会将CPU时间提供给同一类型的另一个线程?

如果我有以下虚拟代码:

public static void main(String[] args) {
  TestRunnable test1 = new TestRunnable();
  TestRunnable test2 = new TestRunnable();
  Thread thread1 = new Thread(test1);
  Thread thread2 = new Thread(test2);
  thread1.start();
  thread2.start();
}

public static class TestRunnable implements Runnable {
  @Override
  public void run() {
    while(true) {
      //bla bla
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在我当前的程序中,我有一个类似的结构,即两个线程执行相同的Run()方法.但由于某种原因,只有线程1被给予CPU时间,即线程2永远不会有机会运行.这是因为当线程1在其while循环中时,线程2会等待吗?

我不确定,如果一个线程在while循环中它是否"阻塞"其他线程?我会这么认为,但不是100%肯定所以如果有人能告诉我这里发生了什么事情会很高兴.

编辑 好的,只是尝试再次制作一个非常简单的例子,现在这两个线程都获得了CPU时间.然而,在我的原始程序中并非如此.某处必须是某些bug.现在调查一下.感谢大家清理它,至少我掌握了这些知识.

java multithreading while-loop

2
推荐指数
1
解决办法
1215
查看次数

在实例化(子)类时,您声明对象的"类型"是否有任何区别?

假设我有一个被调用ParentClass的类和一个被调用的类ChildClass

ParentClass是抽象的,并ChildClass扩展了ParentClass每个Java术语.此外,它ParentClass有一个构造函数,它以int一个参数为参数.现在在另一个类中我想实例化ChildClass.我尝试了以下两种方式:

  1. ChildClass obj1 = new ChildClass(5)
  2. ParentClass obj2 = new ChildClass(5)

Java允许我使用上述两种方法中的任何一种.我的问题是,实际上有什么区别吗?如果我愿意,可以互换使用这两种吗?

java inheritance subclass instantiation

2
推荐指数
1
解决办法
1820
查看次数

在C#中是否可以只需要两个参数中的一个,传入方法?

考虑,

public void Test(Type1 param1, Type2 param2)
{
   //...
}
Run Code Online (Sandbox Code Playgroud)

我想知道在C#中是否可以要求在Test调用时必须包含一个参数.即Test(param1)OR Test(param2) (其中,param1param2是类型Type1Type2分别.它不应该是可能的调用Test(param1, param2).

我的目的是强制执行限制,因此使用可选参数对我没有用.

对于每个人都不清楚的问题,请考虑以下示例:

public void Test(int age, DateTime dob)
{
   //
}
Run Code Online (Sandbox Code Playgroud)

我只需要一个参数来确定年龄.因此,可以限制调用方法Test,使其只能使用EXACTLY一个参数调用,即,age或者dob,但不应该同时调用它们.

c# parameters methods restriction

2
推荐指数
1
解决办法
1313
查看次数

数据处理和转换应该在哪里进行?

我使用它Angular 4作为我的前端框架,基本上只是asp net core作为客户端获取数据并偶尔发布数据的 API。

我正在制作一个仪表板来显示一些统计数据。我在数据库中拥有的数据不能直接用于此仪表板,因为它需要转换和进一步处理。我不会将模型实体返回给 API,而是将其View Model与删除了一些 id 等的模型实体基本相同。

我现在所拥有的是,我的 AngularDashboardComponent正在使用 aDataService来构造一个HTTP GET指向我已经存在的 API 端点的请求GetOrders。这将从数据库中获取所有订单并将其返回到DataService最终DashboardComponent,然后需要提取数据并进行大量处理和转换,以便准备好提供数据Google Charts并生成有意义的图表。然后,用户可以选择在仪表板上查看另一个图表,仅拥有该图表是不够的Orders,还必须从数据库中检索另一个实体,因此使用不同的端点重复上述 API 调用。

我的问题归结为:

  • 最好是在服务器端完成所有处理和转换并将几乎准备好呈现的数据返回给客户端,还是可以让客户端来完成此任务?
  • 在服务器端处理和转换的情况下,我是否应该以这样的方式构建它:我的 API 端点与我想要在仪表板中显示的数据类型相对应?那么,例如选择“英国过去 3 个月的订单”会向专门采用国家/地区和时期等参数的 API 端点发送请求吗?
  • 也许数据应该已经是我可以通过某种数据仓库用于仪表板的形状了?这是要走的路吗?

一般来说,我正在寻找一些关于此的设计模式或只是最佳实践,但还没有真正找到一些东西。

design-patterns api-design transformation server-side client-side

2
推荐指数
1
解决办法
1713
查看次数

IF语句只有在它正在测试的值的'sysout'之前才会执行

我收到一个非常奇怪的错误.我有以下代码:

while (true) {
    System.out.println(model.getLightState());
    if (model.getLightState() == 1) {
        System.out.println("Entered..");
        view.driveThroughJunction();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当灯光状态变为"1"时,我的程序进入if语句并执行正常的代码.但是,只有在输入while循环后我有打印输出语句时,这才有效.我觉得很奇怪.'sysout'行会对if语句产生什么影响吗?显然它适用于上述情况.

对此为何的任何想法?

编辑:

(in the model class)
public final byte getLightState() {
    return lightChanger.getLightValue();
}

(in lightchanger class)
public byte getLightValue() {
    return light.getState();
}

(in the light class)
public final byte getState() {
    return this.state;
}
Run Code Online (Sandbox Code Playgroud)

java multithreading if-statement

1
推荐指数
1
解决办法
187
查看次数

使用string作为Java中对象的名称

好的,所以我有以下代码:

Random rnd = new Random();
int i = 0;
while(i<1000) {
  String name = "event" + i;
  Event name = new Event(rnd.nextInt(100000)); //ERROR duplicate variable
  SimEngine.getScheduler().addEventToQueue(event);
  i++;
}
System.out.println(SimEngine.getScheduler().getQueue().iterator());
Run Code Online (Sandbox Code Playgroud)

我知道两次宣布名字毫无意义,但我希望你能看到我想要做的事情.因为我想要名称为event1,event2,event3等的Event对象.

我怎样才能让它使用String名称作为Event对象的名称?

java string variables

0
推荐指数
1
解决办法
104
查看次数