这篇文章主要为大家详细介绍了Java多线程计算阶乘的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
代码运行结果如下:
输入n的值之后,就可以点击开始计算,计算过程中可以暂停计算,也可以停止计算
这是几种线程的操作:
1.sleep方法,线程按时间睡眠,到时间恢复。
2.suspend/resume,暂停/继续方法。Java多线程废弃方法。资源独占,容易发生死锁,脏数据。
3.stop,停止方法,Java多线程废弃方法,线程不安全。
4.wait方法,使得当前线程立刻停止运行,处于等待状态(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("停止计算");
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) -> {
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.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();
}
}
}
今天就到这里啦,我们下次见哦
到此这篇关于Java介绍多线程计算阶乘实现方法的文章就介绍到这了,更多相关Java多线程计算阶乘内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:Java介绍多线程计算阶乘实现方法
基础教程推荐
猜你喜欢
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- java基础知识之FileInputStream流的使用 2023-08-11
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现查找文件和替换文件内容 2023-04-06
- springboot自定义starter方法及注解实例 2023-03-31
- java实现多人聊天系统 2023-05-19
- Java文件管理操作的知识点整理 2023-05-19
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java实现线程插队的示例代码 2022-09-03
- Java数据结构之对象比较详解 2023-03-07