java 计算是不是已过15分钟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 计算是不是已过15分钟相关的知识,希望对你有一定的参考价值。
参考技术A 1、记录开始时间long start = System.currentTimeMillis();// 返回一个毫秒数
2、记录结束时间
long after15minutes = System.currentTimeMillis();
3、如果 (after15minutes - start)/ 1000 / 60 > 15, 则已过15分钟追问
都返回0啦
呢两个相减---->after15minutes - start
返回0说明,你这中间没做事情啊,你可以在1和2直接加个Thread.sleep(2000),结果就不一样了
追问无其他方式的了?
追答我觉得这样就可以啊,这个问题肯定有个时间起点,你要知道有没过15分钟,只有拿当前时间跟起点比较才可以。不知道你要实现这个功能干什么用,可以说出来看看
追问要实现噶是,当页面不操作时,如果过左15分钟,则做某操作
追答1、你这个功能就类似于session过期,WEB服务的web.xml中都可以配置
15
2、自己实现这个功能的话比较恶心,需要不断的判断,以下方法仅供参考:
类里面定义两个全局变量:
static int lastRequestTime=0;
static int expireTime=15*60*1000;
当页面有动作(假设是向服务发请求)时,lastRequestTime重新赋值当前系统毫秒数(使用Date和Calandar也可以,个人感觉毫米数最简单)System.currentTimeMillis(),即:
lastRequestTime = System.currentTimeMillis();
expireTime += lastRequestTime;
3、写个监听每秒去判断第二步的expireTime 和 System.currentTimeMillis(),如果System.currentTimeMillis() > expireTime ,则过期。
最好是启动线程去监听控制,整体思路是这样的,方法可能有点土,仅供参考
try
Thread.sleep(15*60*1000); //由类名调用
catch (InterruptedException e)
return;
参考技术C 要用监听器实现,监听每秒是否有更改,如果有,则重新获取时间,如果无,则判断是否已过15分钟 参考技术D Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE,15);
Calendar calendar0 = Calendar.getInstance();
calendar0.after(calendar);追问
咁设置,貌似永远都是false喔
呢个是取系统噶时间,例如16:07,即07+15=22,如果07变左08,咁米变成08+15=23
calendar0是07,咁搞法边有可能是true啊
这些不需要你关注,只需要在Calendar 对象的Calendar.MINUTE属性上 加上15 就可以了!
追问晒气,呢个方法用不上,叫人唔需要关注,又唔解答,叫人点用啊
永远都是false有咩用,点判断,倒不如直接写false,唔识用就唔好叫人用
Java多进程管道通信
任务:设计一个父进程,三个子进程(A,B,C)。子进程A,B同时被父进程启动来计算(不实现具体的计算任务,先用CPU空跑来代替)。进程A计算5分钟,而进程B计算8分钟。当进程A,B都计算完成后才能启动进程C,进程C计算3分钟。
Java中的管道:
Java程序中可以启动其他的应用程序,这种在Java中启动的进程称为子进程,启动子进程的Java程序称为父进程,其实这个父进程就是一个Java虚拟机。在Java程序中可以用Process类的实例对象来表示子进程,子进程的标准输入和输出不在连接到键盘和显示器(也就是不再接收键盘输入,和显示器输出),而是以管道流的形式连接到父进程的一个输出流和输入流对象上。
调用Process类的getOutputStream和getInputStream方法可以获得连接到子进程的输出流和输入流对象。子进程从标准输入读到的内容就是父进程通过输出流对象写入到它们俩之间的进程管道中的数据,子进程写入的标准输出的数据通过它们之间的进程管道传递到了父进程的输入流对象中,父进程从这个输入流对象中读取到的内容就是子进程写入到标准输出的数据编程实例。
-
思路:
a) 建立A B C三个类文件,空跑模拟进程运行。
b) 在父进程中通过Runtime.exec()启动各子进程。
c) 子进程与父进程的通信通过上述管道实现,子进程完成后发出一个信息,父进程通过接收线程不断接收信息并判断子进程是否完成并决定下一进程启动与否。 - 代码:
Father.java
import java.io.*;
class Father implements Runnable {
//获取子进程的对象
Process p = null;
Process q = null;
Process r = null;
public Father() throws Exception {
//启动AB进程
p = Runtime.getRuntime().exec("java A");
q=Runtime.getRuntime().exec("java B");
new Thread(this).start();
}
//定义接收线程
public void run() {
Boolean f=true;
try{
InputStream inp = p.getInputStream();
InputStream inq = q.getInputStream();
BufferedReader bfrp = new BufferedReader(new InputStreamReader(inp));
BufferedReader bfrq = new BufferedReader(new InputStreamReader(inq));
while(f) {
String str=bfrp.readLine();
String str1=bfrq.readLine();
//判断进程是否完成
if(str.equals("1")&&str1.equals("1")){
System.out.println("AB");
r=Runtime.getRuntime().exec("java C");
InputStream inr = r.getInputStream();
BufferedReader bfrr = new BufferedReader(new InputStreamReader(inr));
String str2=bfrr.readLine();
if (str2!=null&&str2.equals("1"))
{
System.out.println("C");
f=false;
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception {
Father f = new Father();
}
}
//进程A
A. Java
public class A {
public static void main(String args[]) {
int i=0;
while(true) {
try{
Thread.sleep(1000);
i++;
if(i==30) {
System.out.println("1");
}
if(i>30)
break;
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
//进程B
B. Java
public class B {
public static void main(String args[]) {
int i=0;
while(true) {
try{
Thread.sleep(1000);
i++;
if(i==48) {
System.out.println("1");
}
if(i>48){
break;
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
//进程C
C. Java
public class C {
public static void main(String args[]) {
int i=0;
while(true) {
try{
Thread.sleep(1000);
i++;
if(i==18) {
System.out.println("1");
}
if(i>18){
break;
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
以上是关于java 计算是不是已过15分钟的主要内容,如果未能解决你的问题,请参考以下文章
15分钟完成Kinetics视频识别训练,除了超级计算机你还需要TSM