- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一家商店,里面有很多队列。每个队列都有多个可以等待服务的最大客户端数,我可以写入队列数。我的商店必须在我规定的一定时间后关闭。问题是事实并非如此。它只是生成被服务的客户端并生成等等等等。
import java.util.List;
import java.util.Timer;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//long startTime = System.currentTimeMillis();
long endTime;
int nrCozi;
int nrClientiMax;
System.out.println("Introduceti cate minute va fi deschis magazinul: ");
Scanner in = new Scanner(System.in);
endTime = in.nextInt();
endTime = System.currentTimeMillis() + endTime * 1000 * 60;
System.out.println("Introduceti numarul de cozi: ");
nrCozi = in.nextInt();
System.out.println("Introduceti numarul maxim de clienti per coada: ");
nrClientiMax = in.nextInt();
System.out.println("clienti" + nrClientiMax);
List<Coada> cozi = CoadaUtil.create(nrCozi, endTime);
CoadaUtil.startCozi(cozi);
Timer timer = new Timer();
timer.schedule(new ClientGenerator(nrClientiMax, cozi), 0, (int) (Math.random()* 10 * 1000));
}
}
这是队列类
import java.util.ArrayList;
import java.util.List;
public class Coada implements Runnable {
private List<Client> clients;
private long closingTime;
private long sleepTime = 0;
private String nume;
public Coada(long closingTime) {
clients = new ArrayList<Client>();
this.closingTime = closingTime;
}
public void setNume(String nume) {
this.nume = nume;
}
public void addClient(Client c) {
clients.add(c);
}
private Client pop() {
if (clients.size() > 0) {
Client c = clients.get(0);
clients.remove(0);
return c;
}
return null;
}
@Override
public void run() {
Client c = this.pop();
long currentTime = System.currentTimeMillis();
while (c != null || currentTime < closingTime) {
if (c != null) {
try {
System.out.println("Sunt coada " + this.nume + " si " +
"tratez clientul " + c.getNume());
Thread.sleep(c.getWaitingTime() * 1000);
} catch (InterruptedException e) {
}
}
currentTime = System.currentTimeMillis();
c = this.pop();
if(c==null){
this.sleepTime+=System.currentTimeMillis() - currentTime;
this.sleepTime++;
}
}
// System.out.println("Coada " + this.nume +" a dormit " + this.sleepTime );
}
public int getClientSize() {
return clients.size();
}
public String getNume() {
return this.nume;
}
public long getSleepTime(){
return this.sleepTime;
}
}
ClientGenerator类
import java.util.List;
import java.util.TimerTask;
public class ClientGenerator extends TimerTask {
private int nrClients;
private List<Coada> cozi;
public ClientGenerator(int i, List<Coada> cozi) {
this.nrClients = i;
this.cozi = cozi;
}
@Override
public void run() {
for (int i = 0; i < nrClients; i++) {
System.out.println("!!!!!!!!!!!!!Client" + i +" din " + nrClients);
Client client = new Client((int) (Math.random() * 10), i + ""); // timp random
System.out.println("Clientul " + client.getNume() + " asteapta " + client.getWaitingTime()*10 + " secunde");
Coada coada = CoadaUtil.gasesteCoadaOptima(cozi);
coada.addClient(client);
System.out.println("Am adaugat clientul " + i + " la" +
" coada " + coada.getNume());
}
}
}
CoadaUtil 类
import java.util.ArrayList;
import java.util.List;
public class CoadaUtil {
private CoadaUtil(){}
public static List<Coada> create(int nrCozi, long endTime) {
List<Coada> cozi = new ArrayList<Coada>();
for (int i = 0; i < nrCozi; i++) {
Coada c = new Coada(endTime);
c.setNume(i + "");
cozi.add(c);
}
return cozi;
}
public static void startCozi(List<Coada> cozi) {
for (int i = 0; i < cozi.size(); i++) {
Thread t = new Thread(cozi.get(i));
t.start();
}
}
public static Coada gasesteCoadaOptima(List<Coada> cozi) {
Coada c = cozi.get(0);
for (Coada coada : cozi) {
if (coada.getClientSize() < c.getClientSize()) {
c = coada;
}
}
return c;
}
}
我的猜测是它与 System.currentTimeMillis(); 有关。来自主类。
谢谢,德拉戈斯
最佳答案
程序不会停止,因为在处理客户端的线程完成很久之后,您的Timer
仍会永远生成客户端。
在处理线程(Coada
对象)完成后退出程序的一种简单方法是使 Timer
成为守护线程:
定时器timer = new Timer(true);
当只有守护线程运行时,JVM 将退出。
来自Timer的java文档:
After the last live reference to a Timer object goes away and all outstanding tasks have completed execution, the timer's task execution thread terminates gracefully (and becomes subject to garbage collection). However, this can take arbitrarily long to occur. By default, the task execution thread does not run as a daemon thread, so it is capable of keeping an application from terminating.
关于Java:使用线程的应用程序中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15668673/
我有 3 个列表项,每 3 秒向上旋转一次。我正在使用 transformY 属性来做这件事。问题是,当它到达最后一个元素时,它会循环返回,从而产生重新开始的效果。 如何通过在最后一项之后继续向上旋转
我如何制作一个处理旋转的无限/重复世界,就像在这个游戏中一样: http://bloodfromastone.co.uk/retaliation.html 我通过具有这样的层次结构对我的旋转移动世界进
这个问题已经有答案了: Using explicitly numbered repetition instead of question mark, star and plus (4 个回答) 已关闭
程序说明: I have this program of mine which is intended to read every word from a file (large one) and t
while 循环应该比较这两个对象的 ibsn。正在比较的对象: list[0] = new ReadingMatter ("Words and Stuff", "9-082-1090-1");
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我完全被屏蔽了。我尝试修改 C 中的“警报”信号,以便在秒数到期时读取一个简单的变量。我的代码如下: 在主要部分: int semnal; signal(SIGALRM, alarmHandle
我正在接受多行信息(字符串,直到我稍后解析它们)。例如: 1 5 0 2 9 6 2 9 1 我编写这段代码来分隔行,因为我将不得不以某种方式操作每一行。 Scanner scan = new Sca
我不熟悉 jQuery,并且我有多余的 jQuery 调用,我想将它们放入循环中。 $('.class1').on('click', function () { ... $('.class2').on
我有一个树结构,其中每个节点都有 5 个子节点,并且不允许超过 5 个。我希望以广度优先搜索的方式遍历这棵树。 现在我想使用广度优先搜索方式从选定的父节点计算空节点。 例如 如果给定的父节点为 1,则
目标/动机 我想写一个服务,它应该一直运行。但是当服务已经运行时,应该不可能再次启动该服务。 用例 用户 X 打开页面 myService.php 并通过单击页面上的按钮启动服务。之后关闭浏览器。一段
我正在尝试编译 shogun 工具箱,但遇到了这个错误 C:/shogun-3.0.0/shogun-3.0.0/src/shogun/../shogun/mathematics/Math.h
需要学校的 JavaScript 作业帮助,但不知道该怎么做,希望得到一些提示? 我们应该创建一个 6 面掷骰子程序,用户可以选择应该掷多少个骰子,最少 1 个和最多 5 个骰子。 所用骰子数量的总和
我在无限 ScrollView 中有 5 张图片。 因此,为了使 scrollView 无限/循环,我将图像定位如下: 5 1 2 3 4 5 1含义:最后一张图片第一张图片第二张图片.....最后一
我正在使用 ExTwitter库,并希望能够偶尔终止对流式 API 的调用以更改参数。 我当前的代码看起来像这样: for tweet #finished end 关于elixir - 如何中断(无
我想每 3 秒更改一次 div 的背景。这需要循环,因此一旦最后一个背景图像显示,它就会循环回到第一个背景图像,依此类推。我在这样做时遇到了麻烦。 我之前发过一篇文章,内容非常模糊,没有得到帮助。
我在做this教程,无法让我的页面正确加载。我不断在控制台中收到错误:[$rootScope:infdig]。 我对 Angular 很陌生,但从我读到的内容来看,我在某个地方有一个无限循环。我预计它
所以我试图创建一个无限的 asyncIterator/生成器。该代码应该为“for wait of”循环生成“Hello”和“Hi”,然后永远等待下一个值。问题是它不等待第三个值,也不在循环后打印 2
下图显示了我如何在 HTML5/JS 中制作无限背景滚动。我的连续背景由 X block Canvas 组成。我将在到达下一个 Canvas 之前立即渲染它,并释放上一个 Canvas。这里的问题是动
作为一个业余项目,我正在研究一些自制的素数生成问题,尝试编写一些不同的实现作为自学 C 和 C++ 的方法。当然,生成低素数的最快方法是已经拥有它们,所以我想着手建立一个硬盘素数列表数据文件。我想编写
我是一名优秀的程序员,十分优秀!