欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java介紹多線程計(jì)算階乘實(shí)現(xiàn)方法

 更新時間:2022年06月16日 10:39:33   作者:工藤學(xué)編程  
這篇文章主要為大家詳細(xì)介紹了Java多線程計(jì)算階乘的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

代碼運(yùn)行結(jié)果如下:

輸入n的值之后,就可以點(diǎn)擊開始計(jì)算,計(jì)算過程中可以暫停計(jì)算,也可以停止計(jì)算

這是幾種線程的操作:

1.sleep方法,線程按時間睡眠,到時間恢復(fù)。

2.suspend/resume,暫停/繼續(xù)方法。Java多線程廢棄方法。資源獨(dú)占,容易發(fā)生死鎖,臟數(shù)據(jù)。

3.stop,停止方法,Java多線程廢棄方法,線程不安全。

4.wait方法,使得當(dāng)前線程立刻停止運(yùn)行,處于等待狀態(tài)(WAIT),并將當(dāng)前線程置入鎖對象的等待隊(duì)列中,直到被通知(notify)或被中斷為止。

5.notify方法,喚醒處于等待狀態(tài)的線程

代碼如下:

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("階乘計(jì)算所用時間統(tǒng)計(jì)");
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 北側(cè),加操作欄
		frame.setLayout(new BorderLayout());
		JPanel northPan = new JPanel();
		JLabel label = new JLabel("請輸入n的值:");
		textField = new JTextField(5);
		JButton stratBtn = new JButton("開始計(jì)算");
		stratAction(stratBtn);
		JButton pauseBtn = new JButton("暫停計(jì)算");
		pauseAction(pauseBtn);
		JButton stopBtn = new JButton("停止計(jì)算");
		stopAction(stopBtn);
		northPan.add(label);
		northPan.add(textField);
		northPan.add(stratBtn);
		northPan.add(pauseBtn);
		northPan.add(stopBtn);
		frame.add(northPan, BorderLayout.NORTH);
		// 中間,記錄計(jì)算過程與結(jié)果
		consoleArea = new JTextArea();
		JScrollPane scrollPane = new JScrollPane(consoleArea);
		frame.add(scrollPane, BorderLayout.CENTER);
		frame.setVisible(true);
	}
	// 停止計(jì)算的事件
	private void stopAction(JButton stopBtn) {
		stopBtn.addActionListener((e) -> {
			 cal.stop();
			//thread.stop();
		});
	}
	// 暫停計(jì)算的事件
	private  void  pauseAction(JButton pauseBtn) {
		pauseBtn.addActionListener((e) -> {
			String pauseText = pauseBtn.getText();
			if (pauseText.equals("暫停計(jì)算")) {
				 cal.suspend();
				//thread.suspend();
				pauseBtn.setText("繼續(xù)計(jì)算");
			} else {
				 cal.resume();
				//thread.resume();
				pauseBtn.setText("暫停計(jì)算");
			}
		});
	}
	// 開始計(jì)算的事件
	private void stratAction(JButton button) {
		button.addActionListener((e) -> {
			consoleArea.setText(null);
			String input = textField.getText();
			if(input==null || input.equals(""))
			{
				consoleArea.setText("請先輸入您要計(jì)算的階乘值");
				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();
		}
		}
}

今天就到這里啦,我們下次見哦

到此這篇關(guān)于Java介紹多線程計(jì)算階乘實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Java多線程計(jì)算階乘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • slf4j與log4j全面了解

    slf4j與log4j全面了解

    下面小編就為大家?guī)硪黄猻lf4j與log4j全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • mybatis中嵌套查詢的使用解讀

    mybatis中嵌套查詢的使用解讀

    這篇文章主要介紹了mybatis中嵌套查詢的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java 5個人坐在一起(有關(guān)第五個人歲數(shù)的問題)

    Java 5個人坐在一起(有關(guān)第五個人歲數(shù)的問題)

    利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推,需要的朋友可以參考下
    2017-02-02
  • Java基礎(chǔ)教程之類數(shù)據(jù)與類方法

    Java基礎(chǔ)教程之類數(shù)據(jù)與類方法

    這篇文章主要介紹了Java基礎(chǔ)教程之類數(shù)據(jù)與類方法,本文是對類的深入探討,類數(shù)據(jù)指類的一些屬性、參數(shù)等,類方法就是類包含的功能方法,需要的朋友可以參考下
    2014-08-08
  • java基礎(chǔ)-數(shù)組擴(kuò)容詳解

    java基礎(chǔ)-數(shù)組擴(kuò)容詳解

    這篇文章主要介紹了Java數(shù)組擴(kuò)容實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-08-08
  • spring mvc中注解@ModelAttribute的妙用分享

    spring mvc中注解@ModelAttribute的妙用分享

    這篇文章主要給大家介紹了關(guān)于spring mvc中注解@ModelAttribute妙用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Android具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • mybatis 自定義實(shí)現(xiàn)攔截器插件Interceptor示例

    mybatis 自定義實(shí)現(xiàn)攔截器插件Interceptor示例

    這篇文章主要介紹了mybatis 自定義實(shí)現(xiàn)攔截器插件Interceptor,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫的方法示例

    Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫的方法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式分析了java針對Excel的讀寫及數(shù)據(jù)庫操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-08-08
  • Java實(shí)現(xiàn)無損Word轉(zhuǎn)PDF的示例代碼

    Java實(shí)現(xiàn)無損Word轉(zhuǎn)PDF的示例代碼

    本文將利用Java中的兩個jar包:pdfbox和aspose-words實(shí)現(xiàn)無損Word轉(zhuǎn)PDF功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動手嘗試一下
    2022-06-06
  • 如何使用idea里面自帶的翻譯插件

    如何使用idea里面自帶的翻譯插件

    這篇文章主要介紹了idea里面自帶的翻譯插件,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論