實驗六多線程_第1頁
實驗六多線程_第2頁
實驗六多線程_第3頁
實驗六多線程_第4頁
實驗六多線程_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、桂 林 電 子 科 技 大 學(xué)Java應(yīng)用開發(fā) 實 驗 報 告指導(dǎo)教師意見:教 師簽 名成績實驗名稱 多線程 計算機(jī)科學(xué)與工程學(xué)院計算機(jī)科學(xué)與技術(shù)專 業(yè) 班 第 實 驗 小 組姓 名 學(xué) 號 實 驗 日 期 2015 年 11 月 14 日實驗六 多線程一、 實驗?zāi)康?、掌握線程和多線程的概念。 2、掌握創(chuàng)建線程的兩種方法及其區(qū)別。 3、了解線程的啟動、終止、同步、互斥和優(yōu)先級等概念。二、 實驗內(nèi)容1、編寫一個程序,其功能是運(yùn)行之后,其中有一個線程可以輸出20次你的學(xué)號,另一個線程會輸出20次你的姓名。 2、編寫一個圖形界面程序,運(yùn)行之后,讓其中有一個線程能在界面上“實時”顯示系統(tǒng)當(dāng)前時間(精

2、確到秒獲取時間可查詢java.util.Calendar類,它包含了多個用于獲得系統(tǒng)時間的函數(shù))。另讓一個線程可以在界面上提示當(dāng)前系統(tǒng)時間下用戶該做什么工作(例如當(dāng)程序判斷出系統(tǒng)時間現(xiàn)在是8:00到9:00,則提示用戶該上課;現(xiàn)在是23:00到8:00,則提示用戶該休息。 具體測試時可以將時間段限制到秒級,以便及時查看到程序運(yùn)行中提示信息的變化)。三、 分析與設(shè)計1. Thread t1 = new Thread(new Number(), " 學(xué)號:"); / 創(chuàng)建線程1的對象,并通過第二個參數(shù)將其命名為學(xué)號Thread t2 = new Thread(new Name(

3、), " 姓名:"); / 創(chuàng)建線程2的對象,并通過第二個參數(shù)將其命名為姓名使用以下代碼來實現(xiàn)第一個線程,第二個輸出名字的線程代碼類似。class Number implements Runnable public void run() for (int i = 1; i <= 20; i+) System.out.println("第" + i + "次執(zhí)行線程:"+ Thread.currentThread().getName() + "1300310327");s6_1.j1.append("

4、第" + i + "次執(zhí)行線程n"+ Thread.currentThread().getName() + "1300310327n");Thread.yield(); / 暫停當(dāng)前正在執(zhí)行的線程對象,并執(zhí)行其他線程2. 使用一下代碼或得系統(tǒng)時間int y,m,d,h,mi,s;Calendar cal=Calendar.getInstance();y=cal.get(Calendar.YEAR);m=cal.get(Calendar.MONTH)+1;d=cal.get(Calendar.DATE);h=cal.get(Calendar.HO

5、UR_OF_DAY);mi=cal.get(Calendar.MINUTE);s=cal.get(Calendar.SECOND);if else語句來輸出當(dāng)前時間和事件四、 測試數(shù)據(jù)及運(yùn)行結(jié)果多線程的運(yùn)行結(jié)果: 顯示時間和事件:事件會隨著時間的變化實時的顯示在第二個線程哪里 五、 問題與總結(jié)創(chuàng)建線程有兩種方法,一是聲明一個類的同時實現(xiàn)Runnable接口,這個類必須實現(xiàn)一個沒有參數(shù)的run方法,run方法中的代碼即線程所要做的事情。一般操作系統(tǒng)中的多線程指的是在操作系統(tǒng)中同時運(yùn)行幾個應(yīng)用程序,每個應(yīng)用程序占用一個進(jìn)程。實際上這些程序在單處理器的系統(tǒng)中并不是同時運(yùn)行,而是操作系統(tǒng)將系統(tǒng)資源分配

6、給各個程序,每個程序在CPU中交替執(zhí)行,由于CPU的速度比較快,我們就感覺不出各程序是交替執(zhí)行,而感覺多個程序是同時運(yùn)行的。for(int i=0;i+)Calendar cal=Calendar.getInstance(); / 獲得當(dāng)前時間int s=cal.get(Calendar.SECOND);if else 判斷當(dāng)前時間應(yīng)該執(zhí)行什么事件六、 附錄package sy6;import java.awt.FlowLayout;import javax.swing.JFrame;import javax.swing.JTextArea;public class s6_1 extends

7、JFrameJFrame jf = new JFrame("學(xué)號姓名");static JTextArea j1, j2;Thread t1 = new Thread(new Number(), " 學(xué)號:"); / 創(chuàng)建線程1的對象,并通過第二個參數(shù)將其命名為學(xué)號Thread t2 = new Thread(new Name(), " 姓名:"); / 創(chuàng)建線程2的對象,并通過第二個參數(shù)將其命名為姓名public s6_1() jf.setLayout(new FlowLayout();j1 = new JTextArea(40,

8、15);j2 = new JTextArea(40, 15);jf.add(j1);jf.add(j2); / 將2個組件添加到界面上jf.setLocation(200, 150);jf.setVisible(true);jf.pack();jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);t1.start(); / 啟動兩個線程運(yùn)行t2.start();public static void main(String args) s6_1 frm = new s6_1();class Number implements Runnable pub

9、lic void run() for (int i = 1; i <= 20; i+) System.out.println("第" + i + "次執(zhí)行線程:"+ Thread.currentThread().getName() + "1300310327");s6_1.j1.append("第" + i + "次執(zhí)行線程n"+ Thread.currentThread().getName() + "1300310327n");Thread.yield(); / 暫停

10、當(dāng)前正在執(zhí)行的線程對象,并執(zhí)行其他線程class Name implements Runnable public void run() for (int i = 1; i <= 20; i+) System.out.println("第" + i + "次執(zhí)行線程:"+ Thread.currentThread().getName() + "吳錦怡");s6_1.j2.append("第" + i + "次執(zhí)行線程n"+ Thread.currentThread().getName() +

11、 "吳錦怡n");Thread.yield();package sy6;import java.awt.FlowLayout;import java.text.SimpleDateFormat;import java.util.Calendar;import javax.swing.JLabel;import javax.swing.JFrame;import javax.swing.JTextArea;public class s6_2JFrame jf=new JFrame("時間表");static JTextArea jta1,jta2;JLab

12、el jl1 = new JLabel();JLabel jl2 = new JLabel();Thread trda=new Thread1();/線程trdaMyyThread trdb=new MyyThread();/線程trdbpublic s6_2()/生成圖形界面jf.setLayout(new FlowLayout();jta1=new JTextArea(5,20);jta2=new JTextArea(5,20);jf.add(jta1); jf.add(jta2);/將兩個組件添加到界面上jf.setLocation(100,150);jf.setVisible(true

13、);jf.pack();trda.start();/兩個線程啟動trdb.start();public static void main(String args)SuppressWarnings("unused")s6_2 frm=new s6_2();class MyyThread extends Thread/線程1輸出時間public void run()while(true)int y,m,d,h,mi,s;Calendar cal=Calendar.getInstance();y=cal.get(Calendar.YEAR);m=cal.get(Calendar.

14、MONTH)+1;d=cal.get(Calendar.DATE);h=cal.get(Calendar.HOUR_OF_DAY);mi=cal.get(Calendar.MINUTE);s=cal.get(Calendar.SECOND);String s1=Integer.toString(y);String s2=Integer.toString(m);String s3=Integer.toString(d);String s4=Integer.toString(h);String s5=Integer.toString(mi);String s6=Integer.toString(s

15、);s6_2.jta1.setText(s1+"年"+s2+"月"+s3+"日"+s4+"時"+s5+"分"+s6+"秒");SuppressWarnings("unused")class Thread1 extends Thread/線程2輸出該做的事public void run()for(int i=0;i+)Calendar cal=Calendar.getInstance(); int s=cal.get(Calendar.SECOND);if(s>=0&&s<10)s6_2.jta2.setText("休息時間");else if(s>=10&&s<20)s6_2.jta2.setText("學(xué)習(xí)時間");else if(s>=20&&s<30)s6_2.jta2.setText("午飯時間");else if(s>=30&&s<40)s

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論