练习多线程类的两种实现方法,理解多线程程序的生命周期

编写一多线程程序,实现如下功能:

(1)一个线程进行阶乘和的运算(1!+2!+3!... ... +30!), 每次阶乘计算时间随机间隔0.5-1秒;

(2)另一个线程每隔1秒时间读取上个线程的运算结果和计算 进程,并在图形界面中实时显示结果。

public class thread extends Thread{
    private String  sum ="1" ;
    private String result = "0";
    private String Result = "";
    public String getresult()
    {
        return result;
    }
    public String getResult() {
        return Result;
    }
    @Override
    public void run() {
            for(int i=1;i<=30;i++) {
                sum = "1";
                for (int j = 1; j <= i; j++) {
                    BigInteger interger = new BigInteger(sum);
                    sum = interger.multiply(BigInteger.valueOf(j)).toString();
                }
                BigInteger interger = new BigInteger(sum);
                BigInteger interger1 = new BigInteger(result);
                result = interger.add(interger1).toString();
                if(i!=1)
                {
                    Result = Result + "+"+i+"!";
                }else{
                    Result = i+"!";
                }
                double time = 0.5 + Math.random() * 0.5;
                try {
                    Thread.sleep((long) (time * 1000));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    }
主窗口类
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ThreadFrame implements ActionListener{
    JFrame jframe;//创建窗体
    Panel panel;//创建面板
    Label label_title;//创建标签
    Label label_1;
    Label label_2;
    TextField textFile;//创建文本框
    TextArea textArea;//创建文本域
    Button btn;//创建按钮
    public ThreadFrame(){
        jframe=new JFrame("线程");//设置窗体名称
        jframe.setResizable(false);
        jframe.setBounds(600, 100, 490, 400);//设置大小
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//结束进程
        panel=new Panel();
        panel.setBackground(Color.white);//设置背景颜色
        panel.setLayout(null);//取消默认布局
        jframe.add(panel);
        label_title=new Label("多线程实验");
        label_1=new Label("计算线程:");
        label_2 = new Label("计算结果");
        label_1.setBounds(30, 100, 80, 20);
        label_2.setBounds(30, 200, 80, 20);
        panel.add(label_title);
        panel.add(label_1);
        panel.add(label_2);
        textArea=new TextArea();
        textArea.setBounds(130, 80, 300, 60);
        textArea.setEditable(false);//不可编辑
        panel.add(textArea);
        textFile=new TextField("0");
        textFile.setBounds(textArea.getX(), 220, textArea.size().width, 20);
        textFile.setEditable(false);//不可编辑
        panel.add(textFile);
        btn=new Button("开始计算");
        btn.setBounds(jframe.size().width/2-35, 270, 90, 30);
        panel.add(btn);
        btn.addActionListener(this);//添加监听器
        jframe.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        thread ct=new thread();
        Thread tc=new Thread(ct);
        ReadTread rt=new ReadTread(this,ct);
        Thread tr=new Thread(rt);
        tc.start();
        tr.start();
    }
}
读取阶乘结果的类
public class ReadTread extends Thread {
    ThreadFrame tf;
    thread th;
    public ReadTread(ThreadFrame tf,thread th)
    {
        this.tf = tf;
        this.th = th;
    }
    @Override
    public void run() {
        while(true){
            tf.textArea.setText(th.getResult());//将阶乘和的过程显示到文本域中
            tf.textFile.setText(th.getresult());//将阶乘和结果显示到文本框中
            try{
                Thread.sleep(100);//0.1秒读取一次线程
            }catch (Exception e) {

            }
        }
    }
}
主类
public class testThread {
    public static void main(String[] args) {
        ThreadFrame frame = new ThreadFrame();

    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/57256626 【完整课程列表】 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第10章 输入与输出(共38页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第11章 GUI图形用户界面设计(共129页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第12章 swing 组件(共59页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第13章 applet程序(共20页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第14章 多线程(共32页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第15章 数据库编程(共45页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第16章 网络编程(共33页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第1章 概述(共20页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第2章 java基础(共56页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第3章 流程控制(共41页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第4章 方法 函数(共26页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第5章 数组(共58页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第6章 和对象(共50页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第7章 的集成和多态机制(共40页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第8章 接口和包(共48页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第9章 异常处理(共26页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值