日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java多线程计算pi_Java多线程——计算1-20阶乘和

發布時間:2023/12/31 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程计算pi_Java多线程——计算1-20阶乘和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、整體思路

初次學習Java的時候,學習了多線程的理論知識后,就開始練習建立線程的兩種方法,即經過繼承Thead類構造線程 和 經過實現Runnable接口構造線程。你們應該都遇到過這樣的練習題:用上述兩種方法建立線程,分別實現計算和獲取計算結果,計算的內容即是1-20的階乘和,再用一個圖形用戶界面把相關結果按必定要求顯示出來。javascript

效果預覽

此處的圖形用戶界面相似下圖:java

當用戶按下“開始計算”按鈕時,逐步顯示計算計算信息,今后能夠看出線程進行的過程。web

線程分工

這里一共有三個線程,1:GUI的主線程;2:繼承Thread類的線程;3:實現Runnable的類的線程。具體分工以下:兩個線程中的任意一個用來單純實現計算功能,另外一個做為鏈接的橋梁,獲取計算線程的計算結果,并將其顯示到GUI主線程的界面中去。至于GUI,固然就是顯示線程的做用了。算法

2、設計線程類

GUI

建立GUI的簡單方式就是下載一個Window Builder插件到eclipse中,新建的時候,選擇file——new——other——WindowBuilder——Swing Designer——Application Window新建一個window應用程序。固然你也能夠選擇SWT Designer,只是這里面有的Swing里面都有。你更能夠選擇不使用插件,這時候你的代碼就會是相似于這樣的(用Java寫記事本程序的代碼片斷):數組

public int num1 = 0,num2 = 0,result = 0;//保存運算整數

public String bufferString = "";//獲取文本框中的字符串

public String operString = "";//運算符

JFrame jFrame;

Container contentPane;

public JTextField jTextField;//文本框

public JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;//數字按鈕

public JButton bPlus,bReduce,bRide,bDivede;//加、減、乘、除

public JButton bEqual,bReset;//等號、復位

public JPanel jPanel1,jPanel2;//設置兩個Panel

你就感覺不到自動生成的樂趣,而是要把全部的東西都手動敲出來。。。想一想就腦闊痛啊。不過好處是,你能夠把這個過程的原理了解清楚,這對初學Java的同窗是有很大幫助的。多線程

好了,在這里,GUI的設計主要就是界面和衛惟一的一個事件–按鈕事件,注冊一個ActionLitsener就可響應它了,具體作法見代碼吧:dom

public void actionPerformed(ActionEvent e) {

CoutingThread ct = new CoutingThread();//建立thread對象

ct.start();//用對象調用start方法,啟動線程,執行run方法的內容

Thread reader = new Thread(new Start());//建立線程對象

reader.start();

}

Thread

這里就用Thread的子類線程來實現計算功能吧。計算的代碼不難,一個循環就能搞定,可是若是要獲取每次加法的結果的話,就要考慮怎么把值傳給獲取線程。這時候你須要一個數組來幫助你,把每次加法的結果存到數組里,而后每次取數的時候取相應位置上的元素,再加以顯示就完事了。代碼相似下方:eclipse

public void run() {

//for(int i =1;i<=20;i++)

//{

//result += i;

//step++;

//ex = i+"";

//}

//這是1-20加法的簡單代碼,若是一開始以為階乘難于實現,能夠先作整數的簡單加法

long mul = 1; //保存階乘數

result = new long[30];//數組保存每次加法的結果

result[1] = 1;//從2開始循環,所以把1號位的初值賦好,下同

step = new int[30];//保存計算進度(1-20)

step [1] = 1;

ex = new String[30];//字符串數組保存計算表達式

ex[1] = 1+"!";

for(int i = 2; i <= 20; i++)

{

try {

Thread.currentThread().sleep((int)(Math.random()*500)+500);

//設置休眠時間為0.5-1.0秒的隨機數

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mul = mul*i;//設置階乘數

result[i] = result[i-1] + mul;//設置計算結果

step[i] = step[i-1]+1;//設置進度條

ex[i] = ex[i-1] +"+" + i +"!";//設置計算表達式

}

}

固然,若是你在計算線程里面完成了顯示功能,就不用考慮這么多了。ide

public void run() {

long s = 1;//長整型儲存計算結果

for(i=1; i<=30; i++){

if(str1.equals("")){//判斷是不是第一個顯示的數據

str1 = i + "!";

}else{

str1 += "+" + i + "!";

}

//long s = 1;

//for(int j=1; j<=i; j++){

s *= i;

//}

result += s;

threadFrame.jTextField1.setText(str1);

//顯示計算表達式

threadFrame.jProgressBar.setValue(i);

//顯示進度

try {

Thread.sleep((long)(500 + 500 * Math.random()));

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("第1個線程休眠時出錯!");

//處理異常

}

}

}

Runnable

橋梁線程要作的就是從一個線程里獲取數據顯示到另外一個線程中。須要注意的是,你要將該線程中須要用的其余兩個線程的對象設為public,即擴大其范圍。并在獲取線程中的run方法外將其設為屬性,具體作法以下:svg

ComputeThread computer;

computeApp window;

ReadRunnable(ComputeThread computer,computeApp window){

this.computer = computer;

this.window = window;

}

這里使用了構造方法給兩個線程的對象完成初始化工做。

完成鏈接的代碼以下:

public void run() {

// TODO Auto-generated method stub

try {

for(int n = 1; n<=20; n++)

{

Thread.currentThread().sleep(1000);

window.progressbar.setValue(computer.step[n]);//顯示進度條

window.textex.setText(computer.ex[n]);//顯示計算表達式

window.textresult.setText(computer.result[n]+"");//顯示計算結果

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

3、總結

綜合性實驗,整體思路要清晰,細節也很重要。鏈接線程是核心,計算也是核心。在這里我就是想分享一下本身的計算方法,即用數組存放數據,這也是數據處理的方法技巧。固然算法千萬種,哪一款適合你就須要你本身去摸索和選擇。

我的總結,有錯誤還請指出~

總結

以上是生活随笔為你收集整理的java多线程计算pi_Java多线程——计算1-20阶乘和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。