【Java】实现多线程计算阶乘(完整版)

【Java】实现多线程计算阶乘(完整版),第1张

💕💕💕大家好,这是作业侠系列之Java实现多线程计算阶乘和,还是那句话,大家不想cv或者cv了跑不起来都可以来找我要源码。有任何问题有可以私聊我,大家觉得还行的话,期待你们的三连,这也是我创作的最大动力💕💕💕


往期源码回顾:
【Java】实现绘图板(完整版)
【C++】图书管理系统(完整板)
【Java】实现计算器(完整版)
【Python】实现爬虫,爬取天气情况并进行分析(完整版)
【Java】实现记事本(完整版)

上述源码我的大家有需要可自取,大家不想cv或者cv了跑不起来都可以来找我要源码。

进入主题:

代码运行结果如下:

输入n的值之后,就可以点击开始计算,计算过程中可以暂停计算,也可以停止计算

这是几种线程的操作:

1.sleep方法,线程按时间睡眠,到时间恢复。
2.suspend/resume,暂停/继续方法。Java多线程废弃方法。资源独占,容易发生死锁,脏数据。
3.stop,停止方法,Java多线程废弃方法,线程不安全。
4.wait方法,使得当前线程立刻停止运行,处于等待状态(WAIT),并将当前线程置入锁对象的等待队列中,直到被通知(notify)或被中断为止。
5.notify方法,唤醒处于等待状态的线程

代码如下:


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("阶乘计算所用时间统计");
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 北侧,加操作栏
		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);

		// 中间,记录计算过程与结果
		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("继续计算");
			} 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();
		}
		}

}

今天就到这里啦,我们下次见哦!!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1498171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

随机推荐

  • 百御堂是哪个国家的品牌?

    【导读】:山东百御堂阿胶有限公司(百御堂阿胶)是以阿胶片、阿胶固元糕、阿胶口服液、阿胶速溶粉等阿胶系列产品为主的现代化阿胶企业。公司全国营销总部位于素...百御堂是中国品牌。山东百御堂阿胶有限公司(百

    2022-08-19
    0 0 0
  • 乐家嘉是哪个国家的品牌?

    【导读】:乐家嘉广东乐家嘉连锁商业集团——乐家嘉连锁便利店是以24小时便利店经营理念以及线上与线下销售相融合的商业管理机构;是以倡导 时尚、健康、丰富、便...乐家嘉是中国品牌。乐家嘉广东乐家嘉连锁商

    2022-08-19
    0 0 0
  • 松猫是哪个国家的品牌?

    【导读】:PINECAT松猫品牌商城系列产品主营数码家电与日化系列;支持全国联保,现已在阿里巴巴开通实力商家产品经过质检过后销售,品质合格支持各大商场代销代理松猫是中国品牌。PINECAT松猫品牌商城

    2022-08-19
    0 0 0
  • 朵莹是哪个国家的品牌?

    【导读】:朵莹朵莹品牌隶属于上饶市广丰区依斯锦贸易有限公司,公司尊崇“踏实、拼搏、责任”的企业精神,并以诚信共赢开创经营理念,创造良好的企业环境,以全...朵莹是中国品牌。朵莹朵莹品牌隶属于上饶市广丰

    2022-08-19
    0 0 0
  • 马鲁申Marushin是哪个国家的品牌?

    【导读】:马鲁申MARUSHIN江苏摩邦贸易有限公司是一家以极限运动装备服务为主的新型创业公司,以自营自资的创新理念+创新产品销售思路,创新客户价值的经营模式,...马鲁申Marushin是中国品牌。

    2022-08-19
    0 0 0
  • 依瑞是哪个国家的品牌?

    【导读】:依瑞依瑞品牌隶属于苍南依恋之家贸易有限公司,创立于2012年。苍南依恋之家贸易有限公司主要经营:等产品。公司尊崇“踏实、拼搏、责任”的企业精神,...依瑞是中国品牌。依瑞依瑞品牌隶属于苍南依

  • Novozymes品牌的中文名是什么?

    【导读】:Novozymes的中文名是诺维信,诺维信是丹麦的品牌。创于1941年,知名饲料添加剂品牌,丹麦诺维信集团旗下,全球颇大的工业酶制剂和工业微生物制剂的生产企业诺维信引导生物创新。公司与众多行

    2022-08-19
    0 0 0
  • 鹏翔是哪个国家的品牌?

    【导读】:鹏翔福建鹏翔实业有限公司位于福建省南安市水头镇。水头石中国著名的石材集散地,十几年来经过不断的努力、开拓、创新沉淀了浓厚的石文化氛围,鹏翔就...鹏翔是中国品牌。鹏翔福建鹏翔实业有限公司位于

  • 富玖是哪个国家的品牌?

    【导读】:富玖19世纪初,德国第一次工业革命孕育了德国纺织业的诞生。经过几十年的调整,开始注重科技研发和技术纺织向高技术转化。FlourishJade应运而生,并成...富玖是中国品牌。富玖19世纪初

    2022-08-19
    0 0 0

发表评论

登录后才能评论

评论列表(0条)

保存