Java実験5——マルチスレッド実験
31661 ワード
一、実験目的
1、マルチスレッドクラスの2つの実現方法を練習し、マルチスレッドプログラムのライフサイクルを理解する.
二、実験内容
(1)1つのスレッドが乗算を行い(1!+2!+3!……+30!)、各乗算時間がランダムに0.5~1秒間隔である;(2)別のスレッドが1秒間隔で前のスレッドの演算結果と計算プロセスを読み出し、グラフィックインタフェースに結果をリアルタイムで表示する.
三、実験要求
1、運行結果と計算プロセスを表示するグラフィックユーザーインタフェースを正しく設計する.2、ThreadクラスのサブクラスとRunnableインタフェースの2つの方式を採用して2つのスレッドの設計を完成する.3、全面的なテストを行い、テスト結果を分析する.4、あなたのこの実験での収穫と体得を簡単に説明します.
四、実験設計
1、3つのクラスComputeThread、ReturnThread、ThreadFrameを設計し、それぞれ計算プロセスを実現し、結果プロセスとインタフェース設計を返す.
ThreadFrameクラスコード実装
ComputeThreadクラス実装
ReturnThreadクラス実装
1、マルチスレッドクラスの2つの実現方法を練習し、マルチスレッドプログラムのライフサイクルを理解する.
二、実験内容
, :
(1)1つのスレッドが乗算を行い(1!+2!+3!……+30!)、各乗算時間がランダムに0.5~1秒間隔である;(2)別のスレッドが1秒間隔で前のスレッドの演算結果と計算プロセスを読み出し、グラフィックインタフェースに結果をリアルタイムで表示する.
三、実験要求
1、運行結果と計算プロセスを表示するグラフィックユーザーインタフェースを正しく設計する.2、ThreadクラスのサブクラスとRunnableインタフェースの2つの方式を採用して2つのスレッドの設計を完成する.3、全面的なテストを行い、テスト結果を分析する.4、あなたのこの実験での収穫と体得を簡単に説明します.
四、実験設計
1、3つのクラスComputeThread、ReturnThread、ThreadFrameを設計し、それぞれ計算プロセスを実現し、結果プロセスとインタフェース設計を返す.
ThreadFrameクラスコード実装
public class ThreadFrame implements ActionListener{
JFrame frame;
JPanel panel1,panel2,panel3,panel4,panel5;
Container container;
JTextField output,resultfield;
JButton button;
JLabel label1,label2,label3,label4;
JProgressBar jprogressBar;
public ThreadFrame(){
frame = new JFrame(" ");
frame.setBounds(400, 100, 730, 500);
container=frame.getContentPane();
frame.setResizable(false);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
label1 = new JLabel(" ");
label1.setForeground(Color.red);
label1.setFont(new Font("Dialog",1,50));
label2 = new JLabel(" ");
label2.setFont(new Font("Dialog",1,30));
label3 = new JLabel(" ");
label3.setFont(new Font("Dialog",1,30));
label4 = new JLabel(" ");
label4.setFont(new Font("Dialog",1,30));
output = new JTextField();
output.setPreferredSize(new Dimension(550,40));
output.setFont(new Font("Dialog",1,20));
resultfield = new JTextField();
resultfield.setFont(new Font("Dialog",1,20));
resultfield.setPreferredSize(new Dimension(550,40));
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();
panel5 = new JPanel();
button = new JButton(" ");
button.setFont(new Font("Dialog",1,30));
button.setPreferredSize(new Dimension(200,60));
button.addActionListener(this);
jprogressBar = new JProgressBar(0,30);
jprogressBar.setPreferredSize(new Dimension(550,20));
panel1.add(label1);
panel2.add(label2);
panel2.add(output);
panel3.add(label3);
panel3.add(resultfield);
panel4.add(label4);
panel4.add(jprogressBar);
panel5.add(button);
container.setLayout(new GridLayout(5,1));
container.add(panel1);
container.add(panel2);
container.add(panel3);
container.add(panel4);
container.add(panel5);
frame.show();
}
//
public void actionPerformed(ActionEvent e)
{
ComputeThread computethread = new ComputeThread(this);
Thread thread1 = new Thread (computethread);// runnable
ReturnThread thread2 = new ReturnThread(this);// Thread
thread1.start();//
thread2.start();//
}
public static void main(String[] args)
{
ThreadFrame test = new ThreadFrame();
}
}
ComputeThreadクラス実装
public class ComputeThread implements Runnable{
ThreadFrame threadframe ;
static public double result = 0;
static public int i;
String str1 = "";
public ComputeThread(ThreadFrame t) {
threadframe = t;
}
public void run() {
long s=1;
for(i=1;i<=30;i++)
{
if(str1.equals(""))
{
str1=i+"!";
}
else
{
str1 += "+" + i + "!";
}
s *=i;
result +=s;
threadframe.output.setText(str1);
threadframe.jprogressBar.setValue(i);
try {
Thread.sleep((long)(500 + 500 * Math.random()));
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(" 1 !");
}
}
}
}
ReturnThreadクラス実装
public class ReturnThread extends Thread{
ThreadFrame threadFrame;
public ReturnThread(ThreadFrame threadFrame){
this.threadFrame = threadFrame;
}
public void run() {
while(ComputeThread.i != 30){
threadFrame.resultfield.setText("" + ComputeThread.result);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(" 2 !");
}
}
//
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(" 2 !");
}
threadFrame.resultfield.setText("" + ComputeThread.result);
ComputeThread.result = 0;//
ComputeThread.i = 1;// i
threadFrame.button.setText(" ");//
}
}