第十一章 Java多線程機(jī)制_第1頁
第十一章 Java多線程機(jī)制_第2頁
第十一章 Java多線程機(jī)制_第3頁
第十一章 Java多線程機(jī)制_第4頁
第十一章 Java多線程機(jī)制_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT 1. Java中的線程都是中的線程都是Thread類或其子類的對象。類或其子類的對象。 2.線程的生命周期經(jīng)歷線程的生命周期經(jīng)歷4種狀態(tài)種狀態(tài) 新建新建運(yùn)行運(yùn)行中斷中斷死亡死亡JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)

2、計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTclass Example11_4 public static void main(String args ) Thread threadA,threadB,threadC,threadD; TargetObject a1=new TargetObject(), /線程的目標(biāo)對象線程的目標(biāo)對象 a2=new TargetObject(); threadA=new Thread(a

3、1); /目標(biāo)對象是目標(biāo)對象是a1的線程的線程 threadB=new Thread(a1); a1.setNumber(10); threadA.setName(add); threadB.setName(add); threadC=new Thread(a2); /目標(biāo)對象是目標(biāo)對象是a2的線程的線程 threadD=new Thread(a2); a2.setNumber(-10); threadC.setName(sub); threadD.setName(sub); threadA.start(); threadB.start(); threadC.start(); threadD.

4、start(); JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTclass TargetObject implements Runnable private int number=0; public void setNumber(int n) number=n; public void run() while(true) if(Thread.currentThread().getName().equals(add) number+; System.out.println(現(xiàn)在現(xiàn)在number等于等于+number); if(Thread.currentThread().getName().equal

5、s(sub) number-; System.out.println(現(xiàn)在現(xiàn)在number等于等于+number); try Thread.sleep(1000); catch(InterruptedException e) JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT兩種方法的比較(1)繼承)繼承Thread類類優(yōu)點(diǎn):代碼簡單,實(shí)現(xiàn)線程直觀易懂,而且在線程優(yōu)點(diǎn):代碼簡單,實(shí)現(xiàn)線程直觀易懂,而且在線程的控制中實(shí)現(xiàn)也比較方便。當(dāng)使用多個(gè)代碼段

6、時(shí),的控制中實(shí)現(xiàn)也比較方便。當(dāng)使用多個(gè)代碼段時(shí),使用繼承使用繼承Thread類更加緊湊方便。因此許多類更加緊湊方便。因此許多Java程序員使用繼承程序員使用繼承Thread的機(jī)制。的機(jī)制。缺點(diǎn):由于缺點(diǎn):由于Java繼承的單一性原則,如果一個(gè)類繼繼承的單一性原則,如果一個(gè)類繼承了承了Thread,那么它將無法再繼承其他類。,那么它將無法再繼承其他類。JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT兩種方法的比較(2)實(shí)現(xiàn))實(shí)現(xiàn)Runnable接口接口優(yōu)點(diǎn):由于優(yōu)點(diǎn):由于Java技術(shù)只允許單一繼承,所以如果一技術(shù)只允許單一繼承,所以如果一個(gè)類已經(jīng)繼承了其他的類,就不能再繼承個(gè)類已經(jīng)繼承了其他的類,就不能

7、再繼承Thread類。在這個(gè)情況下,要實(shí)現(xiàn)多線程只能采用實(shí)現(xiàn)類。在這個(gè)情況下,要實(shí)現(xiàn)多線程只能采用實(shí)現(xiàn)Runnable接口的方法。接口的方法。缺點(diǎn):由于使用缺點(diǎn):由于使用Runnable來實(shí)現(xiàn)線程具有高度的封來實(shí)現(xiàn)線程具有高度的封裝性,使得程序員只能夠使用一套代碼,如果想裝性,使得程序員只能夠使用一套代碼,如果想創(chuàng)建多個(gè)線程并使各個(gè)線程執(zhí)行不同的代碼,使創(chuàng)建多個(gè)線程并使各個(gè)線程執(zhí)行不同的代碼,使用用Runnable接口來創(chuàng)建線程沒有直接使用繼承接口來創(chuàng)建線程沒有直接使用繼承Thread類創(chuàng)建線程方便。類創(chuàng)建線程方便。 JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSO

8、FTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTimport java.awt.event.*;import java.awt.*;import java.util

9、.Date;import javax.swing.*;public class Example11_10 public static void main(String args) new Win(); class Win extends JFrame implements Runnable,ActionListener Thread showTime=null; JTextArea text=null; JButton buttonStart=new JButton(Start), buttonStop=new JButton(Stop); boolean die;JAVA程序設(shè)計(jì)程序設(shè)計(jì)CC

10、UTSOFTWin() showTime=new Thread(this); text=new JTextArea(); add(new JScrollPane(text),BorderLayout.CENTER); JPanel p=new JPanel(); p.add(buttonStart); p.add(buttonStop); buttonStart.addActionListener(this); buttonStop.addActionListener(this) ; add(p,BorderLayout.NORTH); setVisible(true); setSize(50

11、0,500); validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTpublic void actionPerformed(ActionEvent e) if(e.getSource()=buttonStart) if(!(showTime.isAlive() showTime=new Thread(this); die=false; try showTime.start(); /在在AWT-EventQuecue線程中啟動(dòng)線程中啟動(dòng)showTime線程線程 catch(Exception

12、 e1) text.setText(線程沒有結(jié)束線程沒有結(jié)束run方法之前方法之前,不要再調(diào)用不要再調(diào)用start方法方法); else if(e.getSource()=buttonStop) die=true; public void run() while(true) text.append(n+new Date(); try Thread.sleep(1000); catch(InterruptedException ee) if(die=true) return; JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT

13、JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFTJAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT例例11.13public class Example11_13 public static void main(String args) Number number=new Number(); number.giveNumberThread.start(); number.g

14、uessNumberThread.start(); class Number implements Runnable final int SMALLER=-1,LARGER=1,SUCCESS=8; int realNumber,guessNumber,min=0,max=100,message=SMALLER; boolean pleaseGuess=false,isGiveNumber=false; Thread giveNumberThread,guessNumberThread; Number() giveNumberThread=new Thread(this); guessNumb

15、erThread=new Thread(this); public void run()JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT例例11.13 for(int count=1;true;count+) setMessage(count); if( message=SUCCESS) return; public synchronized void setMessage(int count) if(Thread.currentThread()=giveNumberThread&isGiveNumber=false) realNumber=(int)(Math.random()*100); Syst

16、em.out.println(隨機(jī)給你一個(gè)隨機(jī)給你一個(gè)0至至99之間的數(shù),猜猜是多少?之間的數(shù),猜猜是多少?); isGiveNumber=true; pleaseGuess=true; if(Thread.currentThread()=giveNumberThread) while(pleaseGuess=true) try wait(); /讓出讓出CPU使用權(quán),讓另一個(gè)線程開始猜數(shù)使用權(quán),讓另一個(gè)線程開始猜數(shù) JAVA程序設(shè)計(jì)程序設(shè)計(jì)CCUTSOFT例例11.13 catch(InterruptedException e) if(realNumberguessNumber) /結(jié)束等待后,根據(jù)另一個(gè)線程的猜測給結(jié)束等待后,根據(jù)另一個(gè)線程的猜測給出提示出提示 message=SMALLER; System.out.println(你猜小了你猜小了); else if(realNumber=200) y=10; moveLabel.setLocation(x,y); try moveOrStop.sleep(200); catch(InterruptedException e2) if(die=true) return; /終止線程終止線程 public synchronized void 掛起線程掛起線程()

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論