網(wǎng)絡(luò)編程技術(shù)第三次課多線程代碼_第1頁
網(wǎng)絡(luò)編程技術(shù)第三次課多線程代碼_第2頁
網(wǎng)絡(luò)編程技術(shù)第三次課多線程代碼_第3頁
網(wǎng)絡(luò)編程技術(shù)第三次課多線程代碼_第4頁
網(wǎng)絡(luò)編程技術(shù)第三次課多線程代碼_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1)第一個程序:LeftAndRight.javapublic class LeftAndRight public static void main(String args) Lefthand left;/聲明線程類對象Righthand right;left = new Lefthand();/ 新建線程。right = new Righthand();left.start(); / 線程開始運行后,Lefthand類中的run方法將被執(zhí)行。right.start();for (int i = 0; i <= 6; i+) System.out.println("我是主線程&

2、quot;);class Lefthand extends Thread public void run() for (int i = 1; i <= 9; i+) System.out.println("我是左手線程");try /線程執(zhí)行一次輸出后,休眠500ms(毫秒),使自己放棄CPU資源,/500ms時間到后,重新排隊等待CPU的調(diào)度sleep(500); catch (InterruptedException e) /如果線程在休眠期被打斷,將拋出InterruptedException,/所以sleep方法需要在trycatch語句塊中被調(diào)用class

3、Righthand extends Thread public void run() for (int i = 1; i <= 5; i+) System.out.println("我是右手線程");try sleep(300); catch (InterruptedException e) 2)第二個程序:StudentAndTeacher.javapublic class StudentAndTeacher /* * 兩個線程共享一個對象ComputerSum sum,在運行的過程中修改這個對象的成員變量sum。 * 為了使結(jié)果盡量不依賴于當(dāng)前CPU資源的使用情況

4、,應(yīng)當(dāng)讓線程主動調(diào)用sleep方法,讓出CPU的控制權(quán)進入中斷狀態(tài) */public static void main(String args) / TODO Auto-generated method stubComputerSum sum = new ComputerSum();People teacher = new People("教師", 100, sum);People student = new People("學(xué)生", 100, sum);teacher.start();student.start();class ComputerSum

5、/線程共享的對象類ComputerSum,其中定義了一個數(shù)據(jù)成員sumint sum=0;public void setSum(int n) sum = n;public int getSum() return sum;class People extends Thread /類People是Thread的子類ComputerSum computerSum;int timeLength;People(String s, int timeLength, ComputerSum sum) /構(gòu)造方法setName(s);/ 設(shè)置Thread的名稱this.timeLength = timeLeng

6、th;/設(shè)置休眠時間puterSum = sum;/設(shè)置ComputerSum類的對象sumpublic void run() /重寫Thread父類的run()方法for (int i = 1; i <= 5; i+) int m = computerSum.getSum();/取出computerSum對象中的數(shù)據(jù)成員sumcomputerSum.setSum(m+1);/將數(shù)據(jù)成員sum的值加1System.out.println("我是" + getName() + ",現(xiàn)在的和是" + computerSum.getSum();/輸出當(dāng)前

7、處于運行中的線程的信息try sleep(timeLength);/線程休眠timeLength毫秒 catch (InterruptedException e) 3)第三個程序:StudentAndTeacher1.javapublic class StudentAndTeacher1 /* * StudentAndTeacher1為StudentAndTeacher的改進版本 */public static void main(String args) / TODO Auto-generated method stubComputerSum sum = new ComputerSum();

8、People1 people = new People1(200, sum);people.teacher.start();people.student.start();class ComputerSum1 / 線程共享的對象類ComputerSum,其中定義了一個數(shù)據(jù)成員sumint sum = 0;public void setSum(int n) sum = n;public int getSum() return sum;class People1 implements Runnable / 類People是Thread的子類ComputerSum computerSum;int ti

9、meLength;Thread teacher, student;People1(int timeLength, ComputerSum sum) / 構(gòu)造方法teacher = new Thread(this);/類People1實現(xiàn)了接口Runnableteacher.setName("教師");student = new Thread(this);student.setName("學(xué)生");this.timeLength = timeLength;/ 設(shè)置休眠時間puterSum = sum;/ 設(shè)置ComputerSum類的對象sumpublic

10、 synchronized void computer(Thread thread) int m = computerSum.getSum();/ 取出computerSum對象中的數(shù)據(jù)成員sumcomputerSum.setSum(m + 1);/ 將數(shù)據(jù)成員sum的值加1System.out.println("我是" + thread.getName() + ",現(xiàn)在的和是"+ computerSum.getSum();public void run() / 重寫Thread父類的run()方法for (int i = 1; i <= 5; i

11、+) if (Thread.currentThread() = teacher) computer(teacher); else if (Thread.currentThread() = student) computer(student);try Thread.sleep(timeLength);/ 線程休眠timeLength毫秒 catch (InterruptedException e) 4)第四個程序:GuessNumberGame.java/*猜數(shù)程序第一個線程givenNumberThread負責(zé)隨機給出1-100之間的一個整數(shù)第二個線程guessNumberThread負責(zé)猜出

12、這個數(shù)每當(dāng)?shù)诙€線程給出自己的猜測后第一個線程會將其比較后,提示“猜大了”,“猜小了”,“猜對了”*/public class GuessNumberGame public static void main(String args) GuessNumber gn = new GuessNumber();gn.givenNumberThread.start();/啟動線程gn.guessNumberThread.start();class GuessNumber implements Runnable int realNumber, guessNumber, min = 0, max = 100

13、, message;/realNumber:隨機數(shù);guessNumber:某次猜得的數(shù);message:提示信息final int SMALLER = -1, LARGER = 1, SUCCESS = 8;Thread guessNumberThread, givenNumberThread;/guessNumberThread:線程,給出隨機整數(shù)并判定線程givenNumberThread猜得的數(shù)字是否正確GuessNumber() guessNumberThread = new Thread(this);givenNumberThread = new Thread(this);publ

14、ic void run() for (int i = 1; true; i+) if (Thread.currentThread() = givenNumberThread) /如果當(dāng)前正在運行的線程是givenNumberThreadif (i = 1) /givenNumberThread線程第一次運行時,給出一個隨機數(shù)realNumber = (int) (Math.random() * 100) + 1;System.out.println("給你一個隨機數(shù),猜猜是多少?realNumber="+realNumber); else /*比較guessNumber和r

15、ealNumber的大小,并向猜數(shù)線程guessNumberThread傳遞猜大了或猜小了等信息*/if (guessNumber > realNumber) /猜得的數(shù)偏大message = LARGER;System.out.println("您猜的數(shù)偏大"); else if (guessNumber < realNumber) /猜得的數(shù)偏小message = SMALLER;System.out.println("您猜的數(shù)偏小"); else if (guessNumber = realNumber) /猜對了,guessNumbe

16、r = realNumbermessage = SUCCESS;System.out.println("恭喜,您猜對了!");return;/猜對了,givenNumberThread運行結(jié)束,返回/ elsetry Thread.sleep(1500);/休眠1000毫秒,讓出CPU資源給其他線程 catch (InterruptedException e) / ifif (Thread.currentThread() = guessNumberThread) /如果當(dāng)前正在運行的線程是guessNumberThreadif (i = 1) /*guessNumberTh

17、read線程第一次運行時,guessNumber = (min + max) / 2=(0+100)/2=50后面guessNumberThread采用“折半”查找的原理根據(jù)每次從guessNumberThread那里得到的提示信息,修改max或min的值,給出新的guessNumber的取值*/guessNumber = (min + max) / 2;System.out.println("我猜這個數(shù)是" + guessNumber); else if (message = SMALLER) min = guessNumber;guessNumber = (min +

18、max) / 2;System.out.println("我猜這個數(shù)是" + guessNumber); else if (message = LARGER) max = guessNumber;guessNumber = (min + max) / 2;System.out.println("我猜這個數(shù)是" + guessNumber); else if (message = SUCCESS) /根據(jù)message得知猜對了,guessNumberThread運行結(jié)束,返回System.out.println("我成功了!");re

19、turn;/ elsetry Thread.sleep(1500);/休眠1000毫秒,讓出CPU資源給其他線程 catch (InterruptedException e) / if5)第五個程序GuessNumberGame1.java代碼略。6)第六個程序ScrollWordsAndTimer.java/* * 本例中是一個帶滾動字幕的小時鐘,在文本框中顯示系統(tǒng)當(dāng)前時間, * 滾動的字幕在單擊“加速”鍵后,會加速字幕的滾動速度; 單擊“停止“后,會停止?jié)L動 * 單擊”開始“后,文字會重新開始滾動 */public class ScrollWordsAndTimer public stat

20、ic void main(String args) new SrollingAndTimerFrame();class SrollingAndTimerFrame extends JFrame implements Runnable, ActionListener JButton fastWordsBtn, stopWordsBtn, startWordsBtn, startTimerBtn,stopTimerBtn;/ 加速滾動文字,停止?jié)L動文字,(重新)開始滾動文字,開始顯示時間,停止顯示時間JLabel labelOfScrollWords, labelOfBlank, labelOfT

21、imer;Thread scrollWordsThread, timerThread;/ 滾動文字線程,顯示時鐘線程/ JTextArea textOfTime;JTextField textOfTime;/ 顯示時鐘的文本框boolean stopScrolling, stopTimer;/ 是否停止?jié)L動標(biāo)志位,是否停止顯示系統(tǒng)時間標(biāo)志位SrollingAndTimerFrame() setTitle("一個帶滾動字幕的小字典");setLayout(new FlowLayout();fastWordsBtn = new JButton("加速滾動")

22、;startWordsBtn = new JButton("開始滾動");startWordsBtn.setEnabled(false);stopWordsBtn = new JButton("停止?jié)L動");startTimerBtn = new JButton("開始顯示時間");stopTimerBtn = new JButton("停止顯示時間");fastWordsBtn.addActionListener(this);/ 注冊事件監(jiān)視器startWordsBtn.addActionListener(thi

23、s);stopWordsBtn.addActionListener(this);stopTimerBtn.addActionListener(this);startTimerBtn.addActionListener(this);textOfTime = new JTextField(10);labelOfBlank = new JLabel(" ");JPanel jp1 = new JPanel();jp1.add(textOfTime);jp1.add(startTimerBtn);jp1.add(stopTimerBtn);add(jp1);JPanel jp2 =

24、 new JPanel();jp2.add(labelOfBlank);jp2.add(fastWordsBtn);jp2.add(startWordsBtn);jp2.add(stopWordsBtn);add(jp2);labelOfScrollWords = new JLabel("歡迎使用本系統(tǒng)!");/ JLabel,負責(zé)滾動文字的顯示add(labelOfScrollWords);scrollWordsThread = new Thread(this);/ 創(chuàng)建線程timerThread = new Thread(this);setBounds(100, 100

25、, 420, 200);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);scrollWordsThread.start();/ 啟動滾動文字線程public void run() if (Thread.currentThread() = scrollWordsThread) / 如果當(dāng)前正在運行中的線程是scrollWordsThreadwhile (true) int x = labelOfScrollWords.getBounds().x;int y = 120;x += 5;/ 水平坐標(biāo)

26、labelOfScrollWords.setLocation(x, y);/ 將滾動文字移動到新位置if (x > 380) x = 10;labelOfScrollWords.setLocation(x, y);try scrollWordsThread.sleep(1000); catch (InterruptedException ex) if (stopScrolling = true) / 如果單擊了”停止?jié)L動“按鈕,線程scrollWordsThread結(jié)束返回return;else if (Thread.currentThread() = timerThread) / 如果當(dāng)前正在運行中的線程是timerThreadwhile (true) Date date = new Date();String str = date.toString().substring(11, 19);/ 把date中的時間提取出來textOfTime.setText(str);/ 把時間顯示在文本框中try Thread.sleep(1000);/ 休眠1000毫秒 catch (InterruptedException ex) if (stopTimer = true) return;/ 如果單擊了停

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論