Java实现秒表类
这个类用了主要用了多线程和System.currentTimeMillis()获取当前时间
下面是主要代码
package com.syj.pojo;
import java.util.concurrent.TimeUnit;
/**
* @author syj
* @date 2021/5/9
*/
public class Chronograph {
private long milliseconds;
private long millisecond;
private long second;
private long minute;
private boolean flag;
private boolean suspendflag;
private long stoptime;
private long l = 0;
public long getSecond() {
second = milliseconds/1000%60;
return second;
}
public long getMinute() {
minute = milliseconds/1000/60%60;
return minute;
}
public long getMillisecond() {
millisecond = milliseconds%1000;
return millisecond;
}
public long getMilliseconds() {
return milliseconds;
}
//获取当前时间并且格式化
public String getGapTime(){
long time = getMilliseconds();
long millisecond = time%1000;
long second = time/1000%60;
long minutes = time/1000/60%60;
StringBuilder stringBuilder = new StringBuilder();
if (minutes>59){
return "59:59:99";
}else{
stringBuilder.append(String.format("%02d",minutes))
.append(":")
.append(String.format("%02d",second))
.append(":");
if (String.valueOf(millisecond).length()>2){
stringBuilder.append(String.valueOf(millisecond).substring(0,2));
}else{
stringBuilder.append(String.format("%02d",millisecond));
}
}
return stringBuilder.toString();
}
//启动
public void start(){
long before = System.currentTimeMillis();
flag = true;
new Thread(()->{
while (flag){
try {
TimeUnit.MILLISECONDS.sleep(1);
if (suspendflag){
//TODO:暂停
l = System.currentTimeMillis() - stoptime;
milliseconds = System.currentTimeMillis()-before-l;
}else {
//TODO:继续
milliseconds = System.currentTimeMillis()-before-l;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"Chronograph").start();
}
//暂停
public void suspend(){
stoptime = System.currentTimeMillis()-l;
suspendflag = true;
}
//继续
public void continuerun(){
suspendflag = false;
}
}
如何使用在主函数中创建并且每隔1秒获取时间。
重置没有做,可以在上面的类中将所有关键变量置零即可,也可以重新创建一个秒表类。
package com.syj.pojo;
import java.util.concurrent.TimeUnit;
/**
* @author syj
* @date 2021/5/15
*/
public class Test {
public static void main(String[] args) {
int count = 0;
Chronograph chronograph = new Chronograph();
chronograph.start();
while (true){
try {
count++;
TimeUnit.SECONDS.sleep(1);
if (count==5)
chronograph.suspend();
if (count==7)
chronograph.continuerun();
if (count==9)
chronograph.suspend();
if (count==11)
chronograph.continuerun();
System.out.println(chronograph.getGapTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}