关于一个多线程的码表问题

本文介绍了一个使用过时suspend和resume方法的多线程计时器程序,并探讨了如何改用现代wait和notify方法来实现类似功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

class MyThread extends Thread {
private JLabel label;
private long time;
private long endtime;

public MyThread(JLabel label, long time) {
this.label = label;
this.time = time;
}

public void init() {
endtime = System.currentTimeMillis() + time;
}

@Override
public void run() {
init();
while (true) {
long runtime = endtime - System.currentTimeMillis();
time = runtime;
if(runtime > 0){
label.setText(formatTime(runtime));
}else{
label.setText("GAME OVER");
}

try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

private String formatTime(long runtime) {
int m = (int) (runtime / 1000 / 60);
int s = (int) (runtime / 1000 % 60);
int ss = (int) (runtime % 1000);
return check(m) + ":" + check(s) + "." + check(ss);
}

private String check(int number) {
return number > 9 ? "" + number : "0" + number;
}
}

class ClockFrame extends JFrame {
private JLabel label;
private JButton button;
private MyThread mt;
private boolean bFlag = true;// 控制按钮的显示及线程的挂起恢复

public ClockFrame() {
label = new JLabel();
label.setHorizontalAlignment(JLabel.CENTER);
add(label, BorderLayout.CENTER);

button = new JButton("暂停");
add(button, BorderLayout.NORTH);
setBounds(222, 222, 222, 222);
setVisible(true);

mt = new MyThread(label, 10000L);
mt.start();

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (bFlag) {
button.setText("继续");
mt.suspend();
} else {
button.setText("暂停");
mt.init();
mt.resume();
}
bFlag = !bFlag;
}
});

}
}

public class ClockTest {
public static void main(String[] args) {
new ClockFrame();
}
}

以上是一个多线程的码表程序,运行起来没有问题,但是用到了两个过时的方法,suspend,suspend,想请问如果用wait, notify这两个方法,应该怎么改这个程序,谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值