package practice2;
import java.util.Scanner;
//子线程类
class MyThread1 extends Thread{
private final Object lock = new Object();
static int min=0,sec=0;
private boolean pause = false;//阻塞标志(默认关闭)
void pauseThread() {
this.pause = true;
}//将阻塞信号开启
void clear() {
min=0;sec=0;show();
}
void onPause() {
synchronized (lock) {
try {
lock.wait();//阻塞线程方法
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}//阻塞方法
void resumeThread() {
this.pause = false;
synchronized (lock) {
lock.notify();//恢复线程方法
}
}//恢复方法
void show() {
System.out.println("当前时间为:"+min+":"+sec);
}
void mmshow() {
int mm=(min*60+sec)*100;
System.out.print("毫秒示数为:"+mm+'\n');
}
public void run() {
super.run();
while (true) {
if (pause) {
onPause();
}
try {
//***此处添加你的代码***
sec++;show();
if(sec==60) {sec=0;min++;}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}//线程运行方法
}
public class Timer {
public static void main(String[] args) {
Thread t1 = new MyThread1();//创建子线程
int c;//操作数
Scanner inScanner=new Scanner(System.in);
System.out.print("计时开始!"+'\n');
t1.start();//子线程开始
while(true) {c=inScanner.nextInt();
switch(c) {
case 1:System.out.print("计时恢复!"+'\n');((MyThread1) t1).resumeThread();break;
case 2:System.out.print("计时暂停!"+'\n');((MyThread1) t1).pauseThread();break;
case 3:System.out.print("计时清零!"+'\n');((MyThread1) t1).clear();break;
case 4:((MyThread1) t1).mmshow();break;
default:break;
}
}
// TODO 自动生成的方法存根
}
}
JAVA用子线程实现秒表计时(包括暂停,恢复功能)
最新推荐文章于 2022-03-28 00:09:38 发布