版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
11.1.1線程概述11.1.2線程的創(chuàng)建方式11.1Java線程多線程Java語言程序設(shè)計(jì)Unit1111.1.1線程概述1線程與進(jìn)程線程線程多進(jìn)程多線程運(yùn)行中的應(yīng)用程序稱為進(jìn)程,擁有系統(tǒng)資源(cpu、內(nèi)存)進(jìn)程中的一段代碼,一個(gè)進(jìn)程中可以有多段代碼。本身不擁有資源(共享所在進(jìn)程的資源)在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)任務(wù)(程序)在同一應(yīng)用程序中有多個(gè)功能流同時(shí)執(zhí)行11.1.1線程概述2線程的主要特點(diǎn)123不能以一個(gè)文件名的方式獨(dú)立存在在磁盤中不能單獨(dú)執(zhí)行,只有在進(jìn)程啟動(dòng)后才可啟動(dòng)線程可以共享進(jìn)程相同的內(nèi)存(代碼與數(shù)據(jù))11.1.1線程概述3多線程的主要用途(1)利用它可以完成重復(fù)性的工作(如實(shí)現(xiàn)動(dòng)畫、聲音等的播放)(2)從事一次性較費(fèi)時(shí)的初始化工作(如網(wǎng)絡(luò)連接、聲音數(shù)據(jù)文件的加載)(3)并發(fā)執(zhí)行的運(yùn)行效果(一個(gè)進(jìn)程多個(gè)線程)以實(shí)現(xiàn)更復(fù)雜的功能11.1.1線程概述4多線程(多個(gè)線程同時(shí)運(yùn)行)程序的主要優(yōu)點(diǎn)①可以減輕系統(tǒng)性能方面的瓶頸,因?yàn)榭梢圆⑿胁僮?;②提高CPU的處理器的效率,在多線程中,通過優(yōu)先級(jí)管理,可以使重要的程序優(yōu)先操作,提高了任務(wù)管理的靈活性;另一方面,在多CPU系統(tǒng)中,可以把不同的線程在不同的CPU中執(zhí)行,真正做到同時(shí)處理多任務(wù)。11.1.1線程概述11.1.2線程的創(chuàng)建方式11.1Java線程浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.1.2線程的創(chuàng)建方式1與創(chuàng)建線程有關(guān)的概念
Java創(chuàng)建線程的方式一種是繼承java.lang.Thread類。另一種是實(shí)現(xiàn)java.lang.Runnable接口。
創(chuàng)建線程的幾個(gè)方法線程體:publicvoidrun()方法,其內(nèi)的程序代碼決定了線程的行為和功能。線程啟動(dòng):publicvoidstart(),線程啟動(dòng)后,需要獲取cpu才能自動(dòng)調(diào)用run()運(yùn)行。線程休眠:publicvoidsleep(longms),線程將暫停,放棄cpu。11.1.2線程的創(chuàng)建方式2繼承Thread類創(chuàng)建線程通過一個(gè)例子來說明Thread類創(chuàng)建線程的方法。知識(shí)應(yīng)用
11.1.2線程的創(chuàng)建方式3實(shí)現(xiàn)Runable接口創(chuàng)建線程通過一個(gè)例子來說明Runable接口創(chuàng)建線程的方法。知識(shí)應(yīng)用11.2.1線程生命周期11.2.2線程狀態(tài)11.2線程控制浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.2.1線程生命周期
線程的5個(gè)狀態(tài)線程從創(chuàng)建、運(yùn)行到結(jié)束總是處于下面五個(gè)狀態(tài)之一:新建狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)及死亡狀態(tài)。
線程狀態(tài)變化圖新建狀態(tài)就緒狀態(tài)阻塞狀態(tài)運(yùn)行狀態(tài)死亡狀態(tài)11.2.1線程生命周期1新建狀態(tài)(NewThread)publicvoidstart(){if(clockThread==null){clockThread=newThread(cp,"Clock");clockThread.start();}}當(dāng)Applet啟動(dòng)時(shí)調(diào)用Applet的start()方法,此時(shí)小應(yīng)用程序就創(chuàng)建一個(gè)Thread對(duì)象clockThread。,當(dāng)該語句執(zhí)行后clockThread就處于新建狀態(tài)。注意處于該狀態(tài)的線程僅僅是空的線程對(duì)象,并沒有為其分配系統(tǒng)資源。當(dāng)線程處于該狀態(tài),你僅能啟動(dòng)線程,調(diào)用任何其他方法是無意義的且會(huì)引發(fā)IllegalThreadStateException異常。
cp作為線程構(gòu)造方法的第一個(gè)參數(shù),該參數(shù)必須是實(shí)現(xiàn)了Runnable接口的對(duì)象并提供線程運(yùn)行的run()方法,第二個(gè)參數(shù)是線程名。11.2.1線程生命周期2線就緒狀態(tài)(Runnable)publicvoidstart(){if(clockThread==null){clockThread=newThread(cp,"Clock");clockThread.start();}}
新創(chuàng)建的線程clockThread并不自動(dòng)開始運(yùn)行,當(dāng)該對(duì)象調(diào)用start()方法即啟動(dòng)了線程;start()方法創(chuàng)建線程運(yùn)行的系統(tǒng)資源,并調(diào)度線程運(yùn)行run()方法;當(dāng)start()方法返回后,線程就處于就緒狀態(tài)。注意處于就緒狀態(tài)的線程并不一定立即運(yùn)行run()方法,線程還必須同其他線程競(jìng)爭(zhēng)CPU時(shí)間,只有獲得CPU時(shí)間才可以運(yùn)行線程。因?yàn)樵趩蜟PU的計(jì)算機(jī)系統(tǒng)中,不可能同時(shí)運(yùn)行多個(gè)線程,一個(gè)時(shí)刻僅有一個(gè)線程處于運(yùn)行狀態(tài)。因此此時(shí)可能有多個(gè)線程處于就緒狀態(tài)。對(duì)多個(gè)處于就緒狀態(tài)的線程是由Java運(yùn)行時(shí)系統(tǒng)的線程調(diào)度程序(threadscheduler)來調(diào)度的。11.2.1線程生命周期3運(yùn)行狀態(tài)(Running)publicvoidrun(){while(true){repaint();try{Thread.sleep(1000);}catch(InterruptedExceptione){}}當(dāng)線程獲得CPU時(shí)間后,它才進(jìn)入運(yùn)行狀態(tài),真正開始執(zhí)行run()方法,這里run()方法中是一個(gè)循環(huán),循環(huán)條件是true。4阻塞狀態(tài)(Blocked)線程運(yùn)行過程中,可能由于各種原因進(jìn)入阻塞狀態(tài)。所謂阻塞狀態(tài)是正在運(yùn)行的線程沒有運(yùn)行結(jié)束,暫時(shí)讓出CPU,這時(shí)其他處于就緒狀態(tài)的線程就可以獲得CPU時(shí)間,進(jìn)入運(yùn)行狀態(tài)。11.2.1線程生命周期5死亡狀態(tài)(Dead)線程的正常結(jié)束,即run()方法返回,線程運(yùn)行就結(jié)束了,此時(shí)線程就處于死亡狀態(tài)。
通常在run()方法中是一個(gè)循環(huán),要么是循環(huán)結(jié)束,要么是循環(huán)的條件不滿足,這兩種情況都可以使run()方法返回,使線程正常結(jié)束,進(jìn)入死亡狀態(tài)。循環(huán)自然結(jié)束,run()方法返回,線程結(jié)束:publicvoidrun(){inti=0;while(i<100){i++;System.out.println("i="+i);}}循環(huán)條件不滿足,如小應(yīng)用程序中,run()的循環(huán)條件是clockThread不是null時(shí)為true,但當(dāng)用戶離開含有該小應(yīng)用程序的頁面時(shí),瀏覽器調(diào)用stop方法,將clockThread設(shè)置為null,run()的循環(huán)條件修改為false,循環(huán)結(jié)束,run()方法返回,線程結(jié)束:publicvoidstop(){clockThread=null;}11.2.1線程生命周期11.2.2線程狀態(tài)11.2線程控制浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.2.2線程狀態(tài)1睡眠狀態(tài)
睡眠狀態(tài)(線程休眠)睡眠狀態(tài)也叫線程休眠,線程調(diào)用方法publicvoidsleep(longms),將線程將暫停,放棄cpu。在線程運(yùn)行過程中可以調(diào)用sleep()方法并在方法參數(shù)中指定線程的睡眠時(shí)間將線程狀態(tài)轉(zhuǎn)換為睡眠狀態(tài)。這時(shí),該線程在不釋放占用資源的情況下停止運(yùn)行指定的睡眠時(shí)間。時(shí)間到達(dá)后,線程重新由JVM線程調(diào)度器進(jìn)行調(diào)度和管理。11.2.2線程狀態(tài)1睡眠狀態(tài)使用sleep()方法使線程每過1秒鐘進(jìn)行計(jì)數(shù),直到計(jì)數(shù)到5。計(jì)數(shù)停頓期間進(jìn)入睡眠狀態(tài)。知識(shí)應(yīng)用11.2.2線程狀態(tài)2線程中斷線程的errupt()方法是中斷線程,將會(huì)設(shè)置該線程的中斷狀態(tài)位,即設(shè)置為true,中斷之后線程是死亡、還是等待新的任務(wù)或是繼續(xù)運(yùn)行至下一步,就取決于這個(gè)程序本身。線程會(huì)不時(shí)地檢測(cè)這個(gè)中斷標(biāo)示位,以判斷線程是否應(yīng)該被中斷(中斷標(biāo)示值是否為true)。它并不像stop方法那樣會(huì)中斷一個(gè)正在運(yùn)行的線程。Thread中與中斷相關(guān)的三個(gè)方法(1)interrupt:置線程的中斷狀態(tài)(2)isInterrupt:將線程中斷標(biāo)示位設(shè)置為true后,不會(huì)立刻清除中斷標(biāo)示位,即不會(huì)將中斷標(biāo)設(shè)置為false(3)interrupted:返回線程的上次的中斷狀態(tài),并清除中斷狀態(tài),重新設(shè)置為false。11.2.2線程狀態(tài)3線程阻塞
阻塞狀態(tài)處于運(yùn)行狀態(tài)的線程在某些情況下,如執(zhí)行了sleep(睡眠)方法,或等待I/O設(shè)備等資源,將讓出CPU并暫時(shí)停止自己的運(yùn)行,進(jìn)入阻塞狀態(tài)。在阻塞狀態(tài)的線程不能進(jìn)入就緒隊(duì)列。只有當(dāng)引起阻塞的原因消除時(shí),如睡眠時(shí)間已到,或等待的I/O設(shè)備空閑下來,線程便轉(zhuǎn)入就緒狀態(tài),重新到就緒隊(duì)列中排隊(duì)等待,被系統(tǒng)選中后從原來停止的位置開始繼續(xù)運(yùn)行。11.2.2線程狀態(tài)3線程阻塞暫停Threads執(zhí)行的方法(2)yield()方法讓出CPU的使用權(quán),從運(yùn)行態(tài)直接進(jìn)入就緒態(tài)。(1)sleep()方法可以調(diào)用Thread的靜態(tài)方法:publicstaticvoidsleep(longmillis)throwsInterruptedException使得當(dāng)前線程休眠(暫時(shí)停止執(zhí)行millis毫秒)。(3)join()方法當(dāng)某個(gè)(A)線程等待另一個(gè)線程(B)執(zhí)行結(jié)束后,才繼續(xù)執(zhí)行時(shí),使用join()方法。A的run()方法調(diào)用b.join(),b是線程B的線程實(shí)例。這樣當(dāng)A線程執(zhí)行結(jié)束后,會(huì)通過b.join()自動(dòng)啟動(dòng)B線程的執(zhí)行。11.2.2線程狀態(tài)3線程阻塞yield()方法暫停Thread執(zhí)行示例。讓出CPU的使用權(quán),從運(yùn)行態(tài)直接進(jìn)入就緒態(tài)。知識(shí)應(yīng)用
11.2.2線程狀態(tài)4線程等待
線程等待(線程就緒)線程等待又叫線程就緒。處于就緒狀態(tài)的線程已經(jīng)具備了運(yùn)行條件,但還沒有分配到CPU,處于線程就緒隊(duì)列,等待系統(tǒng)為其分配CPU。
cpu調(diào)度等待狀態(tài)并不是執(zhí)行狀態(tài),當(dāng)系統(tǒng)選定一個(gè)等待執(zhí)行的Thread對(duì)象后,它就會(huì)從等待執(zhí)行狀態(tài)進(jìn)入執(zhí)行狀態(tài),系統(tǒng)挑選的動(dòng)作稱之為“cpu調(diào)度”。一旦獲得CPU,線程就進(jìn)入運(yùn)行狀態(tài)并自動(dòng)調(diào)用自己的run()方法。11.2.2線程狀態(tài)5線程終止
線程終止(死亡狀態(tài))線程終止就是線程死亡狀態(tài)。死亡狀態(tài)是線程生命周期中的最后一個(gè)階段。當(dāng)一個(gè)線程進(jìn)入死亡狀態(tài)以后,就不能再回到其它狀態(tài)了。
線程死亡的原因一個(gè)是正常運(yùn)行的線程完成了它的全部工作;另一個(gè)是線程被強(qiáng)制性地終止,如通過執(zhí)行stop()或destroy()方法來終止一個(gè)線程。11.2.2線程狀態(tài)5線程終止體現(xiàn)線程狀態(tài)轉(zhuǎn)變的代碼示例。知識(shí)應(yīng)用
浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院案例
11-1單元11多線程訂閱報(bào)刊雜志案例單元Java語言程序設(shè)計(jì)主講呂麗華eclipseeclipseeclipse案例目標(biāo)
以讀者訂閱報(bào)刊雜志為背景,體驗(yàn)多線程生成/訂閱模式下的經(jīng)典應(yīng)用。案例解釋線程池是指先創(chuàng)建多個(gè)線程放在線程池中,當(dāng)有任務(wù)需要執(zhí)行時(shí),從線程池中找一個(gè)空閑線程執(zhí)行任務(wù),任務(wù)完成后,并不銷毀線程,而是返回線程池,等待新的任務(wù)安排。案例11-1:訂閱報(bào)刊雜志案例效果案例11-1:訂閱報(bào)刊雜志實(shí)現(xiàn)思路基本步驟創(chuàng)建共享連接池SharePool類,用于放置可以處理用戶SharePool中List對(duì)象用戶存放用戶請(qǐng)求SharePool的produce方法用戶生成節(jié)點(diǎn),當(dāng)共享連接池滿,則禁止增加節(jié)點(diǎn),線程進(jìn)入等待SharePool的consume方法用戶移除用戶節(jié)點(diǎn),當(dāng)連接池中沒有節(jié)點(diǎn),則線程進(jìn)入等待Producer類處理連接池中的訂閱請(qǐng)求,直到請(qǐng)求個(gè)數(shù)為0Consumer類處理移除連接池中已經(jīng)處理的節(jié)點(diǎn)浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.4.1多線程問題11.4.3線程死鎖問題11.4.4volatile字段11.4線程同步11.4.2synchronized關(guān)鍵字11.4.5CountDownLatch字段11.4.1多線程問題一個(gè)線程兩個(gè)線程單線程程序示意圖
多線程程序示意圖多線程(multi-thread)是指在單個(gè)的程序內(nèi)可以同時(shí)運(yùn)行多個(gè)不同的線程完成不同的任務(wù),如圖所示為單線程運(yùn)行和兩個(gè)線程運(yùn)行。浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.4.1多線程問題11.4.3線程死鎖問題11.4.4volatile字段11.4線程同步11.4.2synchronized關(guān)鍵字11.4.5CountDownLatch字段11.4.2synchronized關(guān)鍵字
互斥鎖在有些情況下,多個(gè)線程需要共享數(shù)據(jù)資源,這就涉及到線程的同步與資源共享的問題。
在Java語言中,為保證共享數(shù)據(jù)操作的完整性,引入了對(duì)象互斥鎖的概念。每個(gè)對(duì)象都對(duì)應(yīng)于一個(gè)可稱為“互斥鎖”的標(biāo)記,這個(gè)標(biāo)記用來保證在任一時(shí)刻,只能有一個(gè)線程訪問該對(duì)象。11.4.2synchronized關(guān)鍵字
關(guān)鍵字synchronizedJava對(duì)象默認(rèn)是可以被多線程共用的,在需要時(shí)才啟動(dòng)“互斥”機(jī)制,成為專用對(duì)象。
關(guān)鍵字synchronized用來與對(duì)象的互斥鎖聯(lián)系。當(dāng)某個(gè)對(duì)象用synchronized修飾時(shí),表明該對(duì)象已啟動(dòng)“互斥”機(jī)制,在任一時(shí)刻只能由一個(gè)線程訪問。即使該線程出現(xiàn)阻塞,該對(duì)象的被鎖定狀態(tài)也不會(huì)解除,其他線程仍不能訪問該對(duì)象。11.4.2synchronized關(guān)鍵字(1)同步互斥方法publicsynchronizedvoidmethod(){//允許訪問控制的代碼}(2)同步互斥代碼塊synchronized(syncObject){//允許訪問控制的代碼}(3)鎖定整個(gè)類publicsynchronizedclassSyncObject{ }利用Synchronized關(guān)鍵字用于修飾同步互斥的方法:由于synchronized塊可以針對(duì)任意的代碼塊,且可任意指定上鎖的對(duì)象,因此靈活性較高。浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.4.1多線程問題11.4.3線程死鎖問題11.4.4volatile字段11.4線程同步11.4.2synchronized關(guān)鍵字11.4.5CountDownLatch字段11.4.3線程死鎖問題舉例一個(gè)線程需要鎖定兩個(gè)對(duì)象才能完成,線程1擁有對(duì)象A的鎖,線程1如果再擁有對(duì)象B的鎖就能完成操作,線程2擁有對(duì)象B的鎖,線程2如果再擁有對(duì)象A的鎖就能完成操作。困境很不幸的是線程1執(zhí)行不下去了,因?yàn)榫€程1等待的資源對(duì)象B被線程2鎖住了,線程2也執(zhí)行不下去了,因?yàn)榫€程2等待的資源對(duì)象A被線程1鎖住了,這樣就造成了死鎖。使用互斥鎖容易產(chǎn)生死鎖問題11.4.3線程死鎖問題1生產(chǎn)者與消費(fèi)者問題在一個(gè)果園里,有農(nóng)夫和小孩,農(nóng)夫會(huì)不停的采摘水果放入果園中心的一個(gè)水果筐直到水果筐滿,而小孩會(huì)不停的從水果筐里拿水果來吃,直到水果拿完。實(shí)例農(nóng)夫可以看成是一個(gè)生產(chǎn)者的線程,小孩可以看成是一個(gè)消費(fèi)者的線程,而大水果筐是共享資源。模型分析11.4.3線程死鎖問題1生產(chǎn)者與消費(fèi)者問題用Java程序的多線程的代碼示例,表示上述的生產(chǎn)者與消費(fèi)者問題。知識(shí)應(yīng)用11.4.3線程死鎖問題2wait()方法如果生產(chǎn)的速度大于消費(fèi)的速度就會(huì)導(dǎo)致功大于求,水果筐很容易就滿了,然而生產(chǎn)者又一直抱著水果筐不放,沒有機(jī)會(huì)給消費(fèi)者使用,消費(fèi)者不消費(fèi)生產(chǎn)者就無法生產(chǎn),所以就造成了死鎖。實(shí)例說明死鎖會(huì)出現(xiàn)么?在兩個(gè)同步互斥方法中用到了wait和notify方法,這兩個(gè)方法是為了防止死鎖的。wait是Object類的方法,它的作用是擁有互斥鎖的線程放棄鎖的使用權(quán),進(jìn)入wait池進(jìn)行等待,那么互斥鎖就有可能被其他線程獲得以執(zhí)行其他任務(wù)。怎么解決?11.4.3線程死鎖問題3notify()方法notify()也是Object類的方法,它的作用是從wait池中喚醒一條正在等待的線程進(jìn)入就緒狀態(tài),被喚醒的這條線程就很可能重新獲得cup和互斥鎖來完成它的任務(wù)。4notifyAll()方法notifyAll()和notify()很相似,它是從wait()池中喚醒所有正在等待的線程進(jìn)入就緒狀態(tài)。
注意:以上三個(gè)方法都只能在synchronized方法中應(yīng)用,否者會(huì)出現(xiàn)下面的異常信息:IllegalMonitorStateException:currentthreadnotowner。11.4.3線程死鎖問題舉例說明生產(chǎn)者和消費(fèi)者的關(guān)系以及如何避免死鎖問題。知識(shí)應(yīng)用
11.4.3線程死鎖問題5終止線程
終止線程終止線程也就是將線程的狀態(tài)轉(zhuǎn)換為死亡狀態(tài),死亡狀態(tài)是線程生命周期中的最后一個(gè)階段。
線程死亡的原因一個(gè)原因是正常運(yùn)行的線程完成了它的全部工作;另一個(gè)原因是線程被強(qiáng)制性地終止,如通過執(zhí)行stop或destroy方法來終止一個(gè)線程。
回收線程占用的資源當(dāng)線程體運(yùn)行結(jié)束或者調(diào)用線程對(duì)象的stop()方法后線程將終止運(yùn)行,由JVM收回線程占用的資源。浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院多線程Java語言程序設(shè)計(jì)Unit11主講呂麗華11.4.1多線程問題11.4.3線程死鎖問題11.4.4volatile字段11.4線程同步11.4.2synchronized關(guān)鍵字11.4.5CountDownLatch字段11.4.4volatile字段volatile用來確保將變量的更新操作通知到其他線程,保證了新值能立即同步到主內(nèi)存,以及每次使用前立即從主內(nèi)存刷新。volatile相當(dāng)于synchronized的弱實(shí)現(xiàn),也就是說volatile實(shí)現(xiàn)了類似synchronized的語義,卻又沒有鎖機(jī)制。11.4.4volatile字段互斥(mutualexclusion)可見性(visibility)12鎖的主要特性互斥即一次只允許一個(gè)線程持有某個(gè)特定的鎖,因此可使用該特性實(shí)現(xiàn)對(duì)共享數(shù)據(jù)的協(xié)調(diào)訪問協(xié)議,這樣,一次就只有一個(gè)線程能夠使用該共享數(shù)據(jù)??梢娦砸訌?fù)雜一些,它必須確保釋放鎖之前對(duì)共享數(shù)據(jù)做出的更改對(duì)于隨后獲得該鎖的另一個(gè)線程是可見的--如果沒有同步機(jī)制提供的這種可見性保證,線程看到的共享變量可能是修改前的值或不一致的值,這將引發(fā)許多嚴(yán)重問題。11.4.4volatile字段volatile包含以下語義:(1)Java存儲(chǔ)模型不會(huì)對(duì)valatile指令的操作進(jìn)行重排序:這個(gè)保證對(duì)volatile變量的操作時(shí)按照指令的出現(xiàn)順序執(zhí)行的。(2)volatile變量不會(huì)被緩存在寄存器中(只有擁有線程可見)或者其他對(duì)CPU不可見的地方,每次總是從主存中讀取volatile變量的結(jié)果。也就是說對(duì)于volatile變量的修改,其它線程總是可見的,并且不是使用自己線程棧內(nèi)部的變量。也就是在happens-before法則中,對(duì)一個(gè)valatile變量的寫操作后,其后的任何讀操作理解可見此寫操作的結(jié)果。盡管volatile變量的特性不錯(cuò),但是volatil
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科研質(zhì)量信譽(yù)保障責(zé)任書(9篇)
- 介紹我最喜歡的書中的一位角色寫人作文6篇
- 大學(xué)六級(jí)考試真題及答案
- 企業(yè)內(nèi)訓(xùn)師選拔與培養(yǎng)標(biāo)準(zhǔn)流程
- 企業(yè)固定資產(chǎn)管理系統(tǒng)維護(hù)與報(bào)廢標(biāo)準(zhǔn)
- 供應(yīng)商信息收集與評(píng)估表模板
- 產(chǎn)品質(zhì)量檢驗(yàn)及測(cè)試報(bào)告規(guī)范
- 2025年城建事業(yè)單位考試題目及答案
- 2025年浙江電信12.16筆試及答案
- 2025年準(zhǔn)北人事考試及答案
- (一模)2025~2026學(xué)年佛山市高三教學(xué)質(zhì)量檢測(cè)(一)政治試卷(含答案)
- 車輛駕駛?cè)私逃嘤?xùn)制度
- 學(xué)堂在線 雨課堂 學(xué)堂云 極區(qū)航海導(dǎo)航保障 期末考試答案
- 村莊規(guī)劃搬遷方案
- 安全文明施工措施方案
- 融資租賃實(shí)際利率計(jì)算表
- 民爆物品倉(cāng)庫安全操作規(guī)程
- von frey絲K值表完整版
- 勾股定理復(fù)習(xí)導(dǎo)學(xué)案
- 第二章單自由度系統(tǒng)振動(dòng)
- GB/T 17880.6-1999鉚螺母技術(shù)條件
評(píng)論
0/150
提交評(píng)論