java多线程阶乘_【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )...
(源码在上传的压缩包“【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)”中可看到,该压缩包可下载)java* 采用Thread类的子类实现线程多线程* 编写一多线程程序,实现以下功能:* (1)一个线程进行阶乘和的运算(1!+2!+3!+… … +30!), 每次阶乘计算时间随机间隔0.5-1秒;* (2)另外一个线程每隔1秒时间读取上个线程的运算结果和计算 .
(源码在上传的压缩包“【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)”中可看到,该压缩包可下载)java
* 采用Thread类的子类实现线程多线程 * 编写一多线程程序,实现以下功能:
* (1)一个线程进行阶乘和的运算(1!+2!+3!+… … +30!), 每次阶乘计算时间随机间隔0.5-1秒;
* (2)另外一个线程每隔1秒时间读取上个线程的运算结果和计算 进程,并在图形界面中实时显示结果。dom
ComputeThread
ide
public class ComputeThread extends Thread{//计算阶乘
double sum=0;//存储阶乘和
static int i=0;//存储阶乘和进度
static String stringSum="";//存储阶乘和的字符串
static String stringResult="";//存储阶乘结果的字符串
double method(int n){//计算阶乘
double result=1;//阶乘结果
for(int i=1;i<=n;i++){
result*=i;
}
return result;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(i<30){//计算阶乘和
i++;
sum+=method(i);
stringResult=String.valueOf(sum);//将阶乘和存储到字符串中
if(i!=1){//显示阶乘和的过程:1!+2!+...+30!
stringSum=stringSum+"+"+i+"!";
}else{
stringSum=i+"!";
}
try{//0.5-1秒读取一次线程
Thread.sleep((int)(Math.random()*500+500));
}catch(InterruptedException ex){
}
}
}
}
布局
ReadThread
学习
public class ReadThread extends Thread{//读取阶乘
ThreadFrame tf;
ReadThread(ThreadFrame tf){//初始化
this.tf=tf;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
tf.textArea.setText(ComputeThread.stringSum);//将阶乘和的过程显示到文本域中
tf.textFile.setText(ComputeThread.stringResult);//将阶乘和结果显示到文本框中
tf.jpb.setValue(ComputeThread.i);//在面板上的进度条中显示计算进度
try{
Thread.sleep(100);//0.1秒读取一次线程
}catch (Exception e) {
// TODO: handle exception
}
}
}
}
测试
ThreadFrame
字体
public class ThreadFrame implements ActionListener{//建立面板
JFrame jframe;//建立窗体
Panel panel;//建立面板
Label label_title;//建立标签
Label label_1;
Label label_2;
Label label_3;
TextField textFile;//建立文本框
TextArea textArea;//建立文本域
Button btn;//建立按钮
JProgressBar jpb;//建立进度条
ThreadFrame(){
//建立窗体
jframe=new JFrame("线程");//设置窗体名称
jframe.setBounds(600, 100, 400, 400);//设置大小
jframe.setVisible(true);//设置课件
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_3=new Label("计算读取:");
label_title.setBounds(jframe.size().width/2-50, 10, 100, 50);
label_1.setBounds(30, 100, 60, 20);
label_2.setBounds(30, 160, 60, 20);
label_3.setBounds(30, 220, 60, 20);
label_title.setFont(new Font("宋体", 1, 16));//设置字体
panel.add(label_title);
panel.add(label_1);
panel.add(label_2);
panel.add(label_3);
//建立文本域
textArea=new TextArea();
textArea.setBounds(100, 80, 200, 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, 70, 30);
panel.add(btn);
btn.addActionListener(this);//添加监听器
//建立进度条
jpb=new JProgressBar();
jpb.setBounds(textArea.getX(), textArea.getY()+textArea.size().height+10, textArea.size().width, 40);
jpb.setMaximum(30);//设置最大值
panel.add(jpb);
}
@Override
public void actionPerformed(ActionEvent e) {//按钮点击事件
// TODO Auto-generated method stub
//调用计算线程
ComputeThread ct=new ComputeThread();
Thread tc=new Thread(ct);
//调用读取线程
ReadThread rt=new ReadThread(this);
Thread tr=new Thread(rt);
//开始线程
tc.start();
tr.start();
}
}
this
TestThread 测试类
spa
public class TestThread extends Thread{
public static void main(String[] args) {
ThreadFrame tf=new ThreadFrame();
}
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)