hdml指的是什么接口
314
2022-07-22
代码运行结果如下:
输入n的值之后,就可以点击开始计算,计算过程中可以暂停计算,也可以停止计算
这是几种线程的操作:
1.sleep方法,线程按时间睡眠,到时间恢复。
2.suspend/resume,暂停/继续方法。java多线程废弃方法。资源独占,容易发生死锁,脏数据。
3.stop,停止方法,Java多线程废弃方法,线程不安全。
4.wait方法http://,使得当前线程立刻停止运行,处于等待状态(WAIT),并将当前线程置入锁对象的等待队列中,直到被通知(notify)或被中断为止。
5.notify方法,唤醒处于等待状态的线程
代码如下:
import java.awt.BorderLayout;
import java.awt.ScrollPane;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.jscrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.Scrollable;
import alg.Calculate;
public class ThreadUI {
private JTextField textField;
private JTextArea consoleArea;
private Calculate cal;
private Thread thread;
public ThreadUI() {
JFrame frame = new JFrame("阶乘计算所用时间统计");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 北侧,加操作栏
frame.setLayout(new BorderLayout());
JPanel northPan = new JPanel();
JLabel label = new JLabel("请输入n的值:");
textField = new JTextField(5);
JButton stratBtn = new JButton("开始计算");
stratAction(stratBtn);
JButton pauseBtn = new JButton("暂停计算");
pauseAction(pauseBtn);
JButton stopBtn = new JButton("停止计算");
beFOEHlqc stopAction(stopBtn);
northPan.add(label);
northPan.add(textField);
northPan.add(stratBtn);
northPan.add(pauseBtn);
northPan.add(stopBtn);
frame.add(northPan, BorderLayout.NORTH);
// 中间,记录计算过程与结果
consoleArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(consoleArea);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setVisible(true);
}
// 停止计算的事件
private void stopAction(JButton stopBtn) {
stopBtn.addActionListener((e) -> {
cal.stop();
//thread.stop();
});
}
// 暂停计算的事件
private void pauseAction(JButton pauseBtn) {
pauseBtn.addActionListener((e) http://-> {
String pauseText = pauseBtn.getText();
if (pauseText.equals("暂停计算")) {
cal.suspend();
//thread.suspend();
pauseBtn.setText("继续计算");
} else {
cal.resume();
//thread.resume();
pauseBtn.setText("暂停计算");
}
});
}
// 开始计算的事件
private void stratAction(JButton button) {
button.http://addActionListener((e) -> {
consoleArea.setText(null);
String input = textField.getText();
if(input==null || input.equals(""))
{
consoleArea.setText("请先输入您要计算的阶乘值");
return;
}
int n = Integer.valueOf(input);
cal = new Calculate(n, (content) -> {
consoleArea.append(content + "\n");
});
// thread = new Thread(cal);
// thread.start();
cal.start();
});
}
public static void main(String[] args) {
new ThreadUI();
}
}
import java.math.BigInteger;
import ui.Logable;
public class Calculate extends Thread /*implements Runnable*/{
private int n;
private Logable logable;
public Calculate(int n,Logable log) {
this.n=n;
this.logable=log;
}
private void caculate() throws InterruptedException {
BigInteger res=BigInteger.valueOf(1);
BigInteger sum=BigInteger.valueOf(0);
StringBuilder sb = new StringBuilder();
for(int i=1;i<=n;i++) {
res=res.multiply(BigInteger.valueOf(i));
sum=sum.add(res);
sb.append((i==1 ? "":"+")+i+"!");
logable.log(sb.toString()+"="+sum);
try {
Thread.sleep((int)(Math.random()*500+500));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
try {
caculate();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
今天就到这里啦,我们下次见哦
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~