Java介紹多線程計算階乘實現(xiàn)方法
代碼運行結(jié)果如下:

輸入n的值之后,就可以點擊開始計算,計算過程中可以暫停計算,也可以停止計算

這是幾種線程的操作:
1.sleep方法,線程按時間睡眠,到時間恢復(fù)。
2.suspend/resume,暫停/繼續(xù)方法。Java多線程廢棄方法。資源獨占,容易發(fā)生死鎖,臟數(shù)據(jù)。
3.stop,停止方法,Java多線程廢棄方法,線程不安全。
4.wait方法,使得當前線程立刻停止運行,處于等待狀態(tài)(WAIT),并將當前線程置入鎖對象的等待隊列中,直到被通知(notify)或被中斷為止。
5.notify方法,喚醒處于等待狀態(tài)的線程
代碼如下:
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("階乘計算所用時間統(tǒng)計");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 北側(cè),加操作欄
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);
// 中間,記錄計算過程與結(jié)果
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("繼續(xù)計算");
} 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();
}
}
}今天就到這里啦,我們下次見哦
到此這篇關(guān)于Java介紹多線程計算階乘實現(xiàn)方法的文章就介紹到這了,更多相關(guān)Java多線程計算階乘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 5個人坐在一起(有關(guān)第五個人歲數(shù)的問題)
利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推,需要的朋友可以參考下2017-02-02
Java基礎(chǔ)教程之類數(shù)據(jù)與類方法
這篇文章主要介紹了Java基礎(chǔ)教程之類數(shù)據(jù)與類方法,本文是對類的深入探討,類數(shù)據(jù)指類的一些屬性、參數(shù)等,類方法就是類包含的功能方法,需要的朋友可以參考下2014-08-08
spring mvc中注解@ModelAttribute的妙用分享
這篇文章主要給大家介紹了關(guān)于spring mvc中注解@ModelAttribute妙用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Android具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-09-09
mybatis 自定義實現(xiàn)攔截器插件Interceptor示例
這篇文章主要介紹了mybatis 自定義實現(xiàn)攔截器插件Interceptor,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
Java實現(xiàn)Excel導入導出數(shù)據(jù)庫的方法示例
這篇文章主要介紹了Java實現(xiàn)Excel導入導出數(shù)據(jù)庫的方法,結(jié)合實例形式分析了java針對Excel的讀寫及數(shù)據(jù)庫操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-08-08
Java實現(xiàn)無損Word轉(zhuǎn)PDF的示例代碼
本文將利用Java中的兩個jar包:pdfbox和aspose-words實現(xiàn)無損Word轉(zhuǎn)PDF功能,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下2022-06-06

