JAVA语言程序设计-多线程计算程序
ComputeThread
package practise;
public class ComputeThread1 extends Thread{
//int step = 0;
double sum = 0;//储存和
static int i = 0;//储存进度
static String stringSum="";//储存和的字符串
static String stringResult="";
double factorial(int n){//计算阶乘
double result=1;//阶乘结果
for(int i=1;i<=n;i++){
result*=i;
}
return result;
}
public void run() {
while(i<20) {
i++;
sum+=factorial(i);
stringResult = String.valueOf(sum);//将和储存到字符串中
if(i != 1) {
stringSum = stringSum+"+"+i+"!";
}
else {
stringSum = i+"!";
}
try {
Thread.sleep((int)(Math.random()*500+500));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
MutiThreadApp
package practise;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JProgressBar;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollBar;
public class MultiThreadApp {
private JFrame frame;
JTextField textField;
JTextArea textArea;
static MultiThreadApp window;
JProgressBar progressBar;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
window = new MultiThreadApp();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public MultiThreadApp() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 316);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel label = new JLabel("\u591A\u7EBF\u7A0B\u8BA1\u7B97\u7A0B\u5E8F");
label.setBounds(142, 15, 132, 21);
frame.getContentPane().add(label);
JLabel label_1 = new JLabel("\u8BA1\u7B97\u8FDB\u5EA6");
label_1.setBounds(15, 51, 81, 21);
frame.getContentPane().add(label_1);
JLabel label_2 = new JLabel("\u8BA1\u7B97\u8868\u8FBE\u5F0F");
label_2.setBounds(15, 118, 95, 21);
frame.getContentPane().add(label_2);
JLabel label_3 = new JLabel("\u8BA1\u7B97\u7ED3\u679C");
label_3.setBounds(15, 180, 81, 21);
frame.getContentPane().add(label_3);
textField = new JTextField();
textField.setBounds(121, 177, 268, 27);
frame.getContentPane().add(textField);
textField.setColumns(10);
progressBar = new JProgressBar();
progressBar.setMaximum(20);
progressBar.setBounds(121, 52, 268, 27);
frame.getContentPane().add(progressBar);
JButton btnNewButton = new JButton("\u5F00\u59CB\u8BA1\u7B97");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ComputeThread1 computer = new ComputeThread1();
computer.start();
Thread reader = new Thread(new Runnable1(computer,window));
reader.start();
}
});
btnNewButton.setBounds(151, 219, 123, 29);
frame.getContentPane().add(btnNewButton);
JScrollBar scrollBar = new JScrollBar();
scrollBar.setBounds(360, 94, 26, 68);
frame.getContentPane().add(scrollBar);
textArea = new JTextArea();
textArea.setBounds(121, 94, 268, 68);
frame.getContentPane().add(textArea);
}
}
Runnable接口
package practise;
import javax.swing.JProgressBar;
public class Runnable1 implements Runnable {
ComputeThread1 computer;
MultiThreadApp window;
Runnable1(ComputeThread1 computer,MultiThreadApp window){
this.computer = computer;
this.window = window;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
try {
window.textField.setText(ComputeThread1.stringResult);
window.textArea.setText(ComputeThread1.stringSum);
window.progressBar.setValue(computer.i);
computer.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}