多線程技術(shù)尚學(xué)堂百戰(zhàn)程序員_第1頁(yè)
多線程技術(shù)尚學(xué)堂百戰(zhàn)程序員_第2頁(yè)
多線程技術(shù)尚學(xué)堂百戰(zhàn)程序員_第3頁(yè)
多線程技術(shù)尚學(xué)堂百戰(zhàn)程序員_第4頁(yè)
多線程技術(shù)尚學(xué)堂百戰(zhàn)程序員_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

知識(shí) 要一 多線程介多線程的基本概程進(jìn)立運(yùn)行的程序空間。如正在運(yùn)行的寫(xiě)字板程序就是一個(gè)進(jìn)程。3部分組成:cpu、data、code。每個(gè)進(jìn)程都是獨(dú)立的,保有自己的cpu時(shí)間,代碼和數(shù)據(jù),即便用同一份程序產(chǎn)生好幾個(gè)進(jìn)程,它們之間還是擁有自己的這3樣?xùn)|西,這樣的缺點(diǎn)是:浪費(fèi)內(nèi)存,cpu的負(fù)擔(dān)較重。多任務(wù)(Multitasking)操作系統(tǒng)將CPU時(shí)間動(dòng)態(tài)地劃分給每個(gè)進(jìn)程,操作系獨(dú)占CPU的使用權(quán)。WindowsCtrl+Alt+Del,線進(jìn)程(lightweightprocess)。線程和進(jìn)程的區(qū)進(jìn)程要比線程消耗的計(jì)算機(jī)資源什么是并并發(fā)是指在一段時(shí)間內(nèi)同時(shí)做多個(gè)事情。當(dāng)有多個(gè)線程在運(yùn)行時(shí),CPU,這種情況下計(jì)算機(jī)操作系統(tǒng)會(huì)采用并發(fā)技術(shù)實(shí)現(xiàn)并發(fā)運(yùn)行,具體做法是采用“時(shí)間片輪詢(xún)算線程的執(zhí)行特方法的執(zhí)行特線程的執(zhí)行特什么是主線程以及子線主線thread即main方法對(duì)應(yīng)的線程,它是程序開(kāi)始時(shí)就執(zhí)行的。Javamain方法,是作為某個(gè)類(lèi)的方法出現(xiàn)的。當(dāng)程序啟動(dòng)時(shí),該方法就會(huì)第一個(gè)自動(dòng)的得到執(zhí)行,并成為程序的主線程。也就是說(shuō),main方法是一個(gè)應(yīng)用的也代表了這個(gè)應(yīng)用的主線程JVM在執(zhí)行main方法時(shí),main方進(jìn)入到棧內(nèi)存,JVM會(huì)通過(guò)操作系統(tǒng)開(kāi)辟一條main方法通向cpu的執(zhí)行路徑,cpu就可以通過(guò)這個(gè)路徑來(lái)執(zhí)行main方法,而這個(gè)路徑有一個(gè)名字,叫main(主)線程子線在主線創(chuàng)建并啟動(dòng)的線程,一般稱(chēng)之為子線程二 線程的創(chuàng)Java通過(guò)繼承Thread類(lèi)實(shí)現(xiàn)多線Javajava.lang.Thread繼承Thread類(lèi)實(shí)現(xiàn)多線程的步驟:ThreadThreadrun(run(startpublicpublicclassTestThreadextendsThreadpublicTestThread(){}*publicvoidrun()for(inti=0;i<20;i++){System.out.println(this.getName()+""+i);}}publicstaticvoidmain(String[]args)TestThreadt1newTestThread();TestThreadt2=new}}通過(guò)實(shí)現(xiàn)Runnable接口實(shí)現(xiàn)多線publicpublicclassTestThread2implementsRunnablepublicTestThread2(){}*publicvoidrun()"開(kāi)始for(inti=0;i<20;i++){}"結(jié)束結(jié)束}publicstaticvoidmain(String[argsTestThread2testThread2=newTestThread2();Threadt1=newThread(testThread2);Threadt2=newThread(newTestThread2());}}線程的執(zhí)行流線程的生命周5new程有自己的內(nèi)存空間,通過(guò)調(diào)用start方法進(jìn)入就緒狀態(tài)。就緒狀態(tài)處于就緒狀態(tài)的線程已經(jīng)具備了運(yùn)行條件,但是還沒(méi)有被分配到CPU,處于“線程就緒隊(duì)列”,等待系統(tǒng)為其分配CPU。就緒狀態(tài)并不是執(zhí)行狀態(tài),當(dāng)系統(tǒng)選定一個(gè)等待執(zhí)行自己的run方法。有4中原因會(huì)導(dǎo)致線程進(jìn)入就緒狀態(tài):startyield(運(yùn)行線程:JVMCPU運(yùn)行狀態(tài)在運(yùn)行狀態(tài)的線程執(zhí)行自己run方法中的代碼,直到調(diào)用其他方法而終止或等待某資阻塞狀態(tài)執(zhí)行wait(nofity()方法喚醒這個(gè)線程后,線程運(yùn)行時(shí),某個(gè)操作進(jìn)入阻塞狀態(tài),比如執(zhí)行IO流操作(read()/write()方法本join()線程聯(lián)合:run(stop()或三 線程的使終止線如果我們想在一個(gè)線終止另一個(gè)線程我們一般不使用JDK提供的stop()/destroy()方法(它們本身也被JDK廢棄了)。通常的做法是提供一個(gè)boolean型的終止變量,當(dāng)這個(gè)變量值為false時(shí),則終止線程的運(yùn)行。publicpublicclassStopThreadimplementsRunnableprivatebooleanflag=true;publicvoidrun()"開(kāi)始inti=System.out.println(Thread.currentThread().getName()+""+i++);try{}catch(InterruptedExceptione){}}"結(jié)束}publicvoidthis.flag=}publicstaticvoidmain(String[]args)throwsExceptionStopThreadstnewStopThread();Threadt1=newThread(st);}}暫停當(dāng)前線程執(zhí)行sleep()yield()yield()CPUsleep方法的使publicpublicclassSleepThreadimplementsRunnable{publicvoidrun()"開(kāi)始for(intSystem.out.println(Thread.currentThread().getName()+""+i);try{}catch(InterruptedExceptione){}}"結(jié)束}publicstaticvoidmain(String[argsThreadt=newThread(newSleepThread());}}yield方法的使yield()的目的是讓具有相同優(yōu)先級(jí)的線程之間能夠適當(dāng)?shù)妮啌Q執(zhí)行。但是,實(shí)際中無(wú)法保證yield()達(dá)到讓步的目的,因?yàn)椋尣降木€程可能被線程調(diào)度程序再次yieldyieldyield后,yieldyieldpublicpublicclassYieldThreadimplementsRunnable{publicvoidrun()for(intif(i==0){}}}}publicstaticvoidmain(String[]args){Threadt1=newThread(newYieldThread());Threadt2=newThread(newYieldThread());}}線程的聯(lián)ABjoin(BA這樣,線程A就必須等待線程B執(zhí)行完畢后,才能繼續(xù)執(zhí)行。join方法的使classAimplementspublicclassAimplementspublicvoidrun()for(inti=0;i<10;i++){try{}catch(InterruptedExceptione)}}}}classBimplementsRunnable{publicvoidrun()for(inti=0;i<20;i++){

try{}catch(InterruptedExceptione){}}}}publicclassJoinThreadpublicstaticvoidmain(String[]args){Threadt=newThread(newA());Threadt1=newThread(newB());for(inti=0;i<10;i++){

if(i==2try}catch(InterruptedExceptione){}}try{}catch(InterruptedExceptione){}}}}線程聯(lián)合案*classSonThreadimplementspublicvoidrun(){for(inttry{}catch(InterruptedExceptione){}}}}*classFatherThreadimplementspublicvoidrun() 想抽煙,發(fā)現(xiàn)煙抽完了 讓兒子去買(mǎi)一包紅塔山Threadt=newThread(newSonThread());try{}catch(InterruptedExceptione){ }}}publicclassJoinDemopublicstaticvoidmain(String[]args)ThreadtnewThread(newFatherThread());}}Thread類(lèi)中的其他常用方獲取當(dāng)前線程名方式this.getName()ThreadclassclassGetName1extendsThread{publicvoidrun(){}}方式Thread.currentThread().getName()Runnable接口實(shí)現(xiàn)classclassGetName2implementspublicvoidrun(){}}設(shè)置線程的名方式classclassSetName1extendspublicSetName1(String}publicvoidrun(){}}publicclassSetNameThreadpublicstaticvoidmain(String[]args){SetName1setName1=newSetName1("SetName1");}}方式setName()classclassSetName2implementspublicvoidrun(){}}publicclassSetNameThreadpublicstaticvoidmain(String[]args)/*SetName1setName1=newSetName1();Threadthread=newThread(newSetName2());}}判斷當(dāng)前線程是否存isAlive()classAliveclassAliveimplementspublicvoidrun(){try{}catch(InterruptedExceptione){}}}publicclassAliveThreadpublicstaticvoidmain(String[]args){Threadthread=newThread(newAlive());System.out.println(thread.isAlive()+"1");System.out.println(thread.isAlive()+"3");try{}catch(InterruptedExceptione){}}}四 線程的優(yōu)先什么是線程的優(yōu)先110,一個(gè)線程的缺省優(yōu)先級(jí)是5。Java的線程優(yōu)先級(jí)調(diào)度會(huì)委托給操作系統(tǒng)去處理,所以與具體的操作系統(tǒng)優(yōu)先級(jí)有關(guān),線程優(yōu)先級(jí)的使intvoidsetPriority(intclassclassPriorityimplementsprivateintnum=privatebooleanflag=true;publicvoidrun()}}publicvoidthis.flag=}}publicclassPriorityThreadpublicstaticvoidmain(String[]args)throwsException{Priorityp1=newPriority();Priorityp2=newPriority();Threadt1newThread(p1,"Threadt2newThread(p2,"http://Thread.MAX_PRIORITY=//Thread.MAX_PRIORITY=1}}五 守護(hù)線什么是守護(hù)線JavaUserThread(用戶(hù)線程)DaemonThread(守護(hù)線程):比如回收線程,就是最典型的守護(hù)線程守護(hù)線程(即DaemonThread),是一個(gè)服務(wù)線程,準(zhǔn)確地來(lái)說(shuō)就是服務(wù)其他的線程,守護(hù)線程會(huì)隨著用戶(hù)線程而守護(hù)線程與用戶(hù)線程的區(qū)用戶(hù)線程,不隨著主線程的而。用戶(hù)線程只有兩種情況會(huì)死掉,1在run中異常終止。2正常把run執(zhí)行完畢,線程。守護(hù)線程,隨著用戶(hù)線程的而,當(dāng)用戶(hù)線程守護(hù)線程也會(huì)隨之守護(hù)線程的使*classDaemonimplementspublicvoidrun()for(inti=0;i<20;i++){try{}catch(InterruptedExceptione){}}}}classUsersThreadimplementsRunnable{publicpublicvoidrun()Threadt=newThread(newfor(inti=0;i<5;i++){try{}catch(InterruptedExceptione){}}}}publicclassDaemonThreadpublicstaticvoidmain(String[]args)throwsException{Threadt=newThread(newUsersThread(),"UsersThread");}}六 線程同什么是線程同線程現(xiàn)現(xiàn)實(shí)生活中,我們會(huì)遇到“同一個(gè)資源,多個(gè)人都想使用”的問(wèn)題。比如:教室這時(shí)候,我們就需要用到“線程同步”。線程同步其實(shí)就是一種等待機(jī)制,多個(gè)需要同時(shí)線程案例演我們以銀行取款經(jīng)典案例來(lái)演示線程現(xiàn)象用戶(hù)輸入賬戶(hù)、,系統(tǒng)判斷用戶(hù)的賬戶(hù)、是否匹配*class//privateString//privatedoublepublicAccount()}publicAccount(StringaccountNo,doublebalance)this.accountNo=this.balance=}publicStringgetAccountNo()return}publicvoidsetAccountNo(StringaccountNo)this.accountNo=}publicdoublegetBalance()return}publicvoidsetBalance(doublebalance)this.balance=}}*classDrawThreadextends//privateAccount//privatedoublepublicDrawThread(Stringname,Accountaccount,doublethis.account=account;this.drawMoney=}*publicvoidrun()//if(this.account.getBalance()>="try{}catch(InterruptedExceptione){}"}}}publicclassDrawMoneyThreadpublicstaticvoidmain(String[]args){Accountaccount=newAccount("1234",1000);newDrawThread("老公newDrawThread("老婆}}實(shí)現(xiàn)線程同的問(wèn)題。Java語(yǔ)言提供了專(zhuān)門(mén)機(jī)制以解決這種,有效避免了同一個(gè)數(shù)據(jù)對(duì)象被多個(gè)線程同時(shí)造成的這種問(wèn)題。這套機(jī)制就是synchronized關(guān)鍵字。}需要對(duì)哪些線的代碼具有互斥能力(通過(guò)synchronized鎖對(duì)象來(lái)決定)它包括兩種用法:synchronized方法和synchronized塊。synchronized方法通過(guò)在方法中加入synchronized關(guān)鍵字來(lái),語(yǔ)法如下publicsynchronizedvoidaccessVal(intsynchronized在方法時(shí)使用:放在范圍操作符(public)之后,返回類(lèi)型(void)是在synchronized方法內(nèi)部的線程)執(zhí)行完該方法后,別的線程才能進(jìn)入。synchronized方法的缺陷若將一個(gè)大的方法為synchronized將會(huì)大大影響效Java為我們提供了更好的解決辦法,那就是synchronized塊。塊可以讓我們精確修改線程案例演*class//privateString//privatedoublepublicAccount()}publicAccount(StringaccountNo,doublebalance)this.accountNo=this.balance=}publicStringgetAccountNo()return}publicvoidsetAccountNo(StringaccountNo)this.accountNo=}publicdoublegetBalance()return}publicvoidsetBalance(doublebalance)this.balance=}}*classDrawThreadextends//privateAccount//privatedoublepublicDrawThread(Stringname,Accountthis.account=account;this.drawMoney=}*publicvoidrun()synchronized(this.account)//if(this.account.getBalance()>=this.drawMoney)System.out.println(this.getName(鈔票:try}catch(InterruptedExceptione){}//-System.out.println("\t余額為:}elseSystem.out.println(this.getName(不足}}}}publicclassDrawMoneyThreadpublicstaticvoidmain(String[]args){Accountaccount=newAccount("1234",1000);newnewDrawThread("老公newDrawThread("老婆}}線程同步的使使用this作為線程對(duì)象在不同線,相同對(duì)象中的synchronized會(huì)互斥。}或publicsynchronizedvoidaccessVal(int}*classprivateStringpublicProgrammer(S=}*synchronizedpublicvoidtrySystem.out.println(接通電源");System.out.println(按開(kāi)機(jī)按鍵");System.out.println(系統(tǒng)啟動(dòng)中");System.out.println(系統(tǒng)啟動(dòng)成功}catch(InterruptedExceptione){}}*synchronizedpublicvoidtrySystem.out.println(Idea");System.out.println(Idea啟動(dòng)完畢");System.out.println(開(kāi)開(kāi)心心的寫(xiě)代碼}catch(InterruptedExceptione){}}}*classWorking1extendsprivateProgrammerpublicWorking1(Programmerthis.p=}}publicvoidrun()}}*classWorking2extendsprivateProgrammerpublicWorking2(Programmerthis.p=}publicvoidrun()}}publicclassTestSyncThreadpublicstaticvoidmain(String[]args)Programmerp=newnewnew}}使用字符串作為線程對(duì)象synchronized時(shí)都會(huì)同步。}*classprivateStringpublicProgrammer(S=}*synchronizedpublicvoidtrySystem.out.println(接通電源");System.out.println(按開(kāi)機(jī)按鍵");System.out.println(系統(tǒng)啟動(dòng)中");System.out.println(系統(tǒng)啟動(dòng)成功}catch(InterruptedExceptione){}}*synchronizedpublicvoidtrySystem.out.println(Idea");System.out.println(Idea啟動(dòng)完畢");System.out.println(開(kāi)開(kāi)心心的寫(xiě)代碼}catch(InterruptedExceptione){}}*publicvoidsynchronized("suibian")trySystem.out.println(打開(kāi)衛(wèi)生間門(mén)");System.out.println(開(kāi)始排泄");System.out.println(沖水");System.out.println(離開(kāi)衛(wèi)生間}catch(InterruptedExceptione){}}}}*classWorking1extendsprivateProgrammerpublicWorking1(Programmerthis.p=}publicvoidrun()}}*classWorking2extendsprivateProgrammerpublicWorking2(Programmerthis.p=}publicvoidrun()}}*classWCextendsThread{privateProgrammerp;publicWC(Programmerp){this.p=}publicvoidrun()}}publicclassTestSyncThreadpublicstaticvoidmain(String[]args)/*Programmerp=newProgrammer(" newWorking1(p).start();newProgrammerp=newProgrammer(" Programmerp1=new Programmerp2=new newnewnew}}}使用Class作為線程對(duì)象在不同線,擁有相同Class對(duì)象中的synchronized會(huì)互斥。}或synchronizedpublicstaticvoid*classprivateStringname;publicSale(Stringname){=}*synchronizedpublicstaticvoidtrySystem.out.println(Thread.currentThread().getName(表?yè)P(yáng)System.out.println(Thread.currentThread().getName(拿錢(qián)System.out.println(Thread.currentThread().getName(示感謝

System.out.println(Thread.currentThread().getName(的拿錢(qián)走人}catch(InterruptedExceptione){}}}classprivateStringpublicProgrammer(S=}*synchronizedpublicvoidtrySystem.out.println(接通電源");System.out.println(按開(kāi)機(jī)按鍵");System.out.println(系統(tǒng)啟動(dòng)中");System.out.println(系統(tǒng)啟動(dòng)成功}catch(InterruptedExceptione){}}*synchronizedpublicvoidtrySystem.out.println(Idea");System.out.println(Idea啟動(dòng)完畢");System.out.println(開(kāi)開(kāi)心心的寫(xiě)代碼}catch(InterruptedExceptione){}}*publicvoidsynchronized("suibian")trySystem.out.println(打開(kāi)衛(wèi)生間門(mén)");System.out.println(開(kāi)始排泄");System.out.println(沖水");System.out.println(離開(kāi)衛(wèi)生間}catch(InterruptedExceptione){}}}*

publicvoidsynchronized(Programmer.class)trySystem.out.println(+"被 System.out.println(拿錢(qián)");System.out.println(對(duì)公司表示感謝");System.out.println(}catch(InterruptedExceptione){}}}}*classWorking1extendsprivateProgrammerpublicWorking1(Programmerthis.p=}publicvoidrun()}}*classWorking2extendsprivateProgrammerpublicWorking2(Programmerthis.p=}publicvoidrun()}}*classWCextendsThread{privateProgrammerp;publicWC(Programmerp){this.p=}publicvoidrun()}}*classProgrammerMoneyextendsprivateProgrammerpublicProgrammerMoney(Programmerthis.p=}publicvoidrun()}}*classSaleMoneyThreadextendsprivateSalepublicSaleMoneyThread(Salethis.p=}publicvoidrun()}}publicclassTestSyncThreadpublicstaticvoidmain(String[]args)/*Programmerp=newProgrammer(" newWorking1(p).start();new/*Programmerp=newProgrammer(" Programmerp1=newProgrammer(" Programmerp2=new newnewWC(p1).start();newWC(p2).start();*//*Programmerp=new Programmerp1=newProgrammer(" newProgrammerMoney(p).start();newSalesale=new Salesale1=newSale("張麗麗");newSaleMoneyThread(sale).start();newSaleMoneyThread(sale1).start();/*Programmerp1=newProgrammer(" newProgrammerMoney(p1).start();Salesale1newSale("張麗麗new}}}使用自定義對(duì)象作為線程對(duì)象在不同線,擁有相同自定義對(duì)象中的synchronized會(huì)互斥。}*classprivateStringname;publicSale(Stringname){=}*synchronizedpublicstaticvoidtrySystem.out.println(Thread.currentThread().getName(表?yè)P(yáng)System.out.println(Thread.currentThread().getName(拿錢(qián)System.out.println(Thread.currentThread().getName(示感謝

System.out.println(Thread.currentThread().getName(的拿錢(qián)走人}catch(InterruptedExceptione){}}}classprivateStringpublicProgrammer(S=}*synchronizedpublicvoidtrySystem.out.println(接通電源");System.out.println(按開(kāi)機(jī)按鍵");System.out.println(系統(tǒng)啟動(dòng)中");System.out.println(系統(tǒng)啟動(dòng)成功}catch(InterruptedExceptione){}}*synchronizedpublicvoidtrySystem.out.println(Idea");System.out.println(Idea啟動(dòng)完畢");System.out.println(開(kāi)開(kāi)心心的寫(xiě)代碼}catch(InterruptedExceptione){}}*publicvoidsynchronized("suibian")trySystem.out.println(打開(kāi)衛(wèi)生間門(mén)");System.out.println(開(kāi)始排泄");System.out.println(沖水");System.out.println(離開(kāi)衛(wèi)生間}catch(InterruptedExceptione){}}}*publicvoidsynchronized(Programmer.class)try

System.out.println(+"被 System.out.println(拿錢(qián)");System.out.println(對(duì)公司表示感謝");System.out.println(}catch(InterruptedExceptione){}}}}classprivateStringpublicManager(S=}publicStringreturn

*publicvoidcheers(StringmName,StringtrySystem.out.println(mName來(lái)到eNameSystem.out.println(eName拿起酒杯");System.out.println(mName和eName}catch(InterruptedExceptione){}}}*classWorking1extendsprivateProgrammerpublicWorking1(Programmerthis.p=}publicvoidrun()}}*classWorking2extendsprivateProgrammerpublicWorking2(Programmerthis.p=}publicvoidrun()}}*classWCextendsThread{privateProgrammerp;publicWC(Programmerp){this.p=}publicvoidrun()}}*classProgrammerMoneyextendsprivateProgrammerpublicProgrammerMoney(Programmerthis.p=}publicvoidrun()}}*classSaleMoneyThreadextendsprivateSalepublicSaleMoneyThread(Salethis.p=}publicvoidrun()}}*classCheersThreadextendsThread{privateManagermanager;privateStringname;publicCheersThread(Stringname,M=this.manager=}publicvoidrun()synchronized(this.manager)}}}publicclassTestSyncThreadpublicstaticvoidmain(String[]args)/*Programmerp=newProgrammer(" newWorking1(p).start();new/*Programmerp=newProgrammer(" Programmerp1=newProgrammer(" Programmerp2=new newnewWC(p1).start();newWC(p2).start();*//*Programmerp=new Programmerp1=newProgrammer(" newProgrammerMoney(p).start();new/*Salesale=new Salesale1=newSale("張麗麗");newSaleMoneyThread(sale).start();new/*Programmerp1=newProgrammer(" newProgrammerMoney(p1).start();Salesale1newSale("張麗麗newManagermanagernew 豐newnewnew}}死鎖的概因此,某一個(gè)同步塊需要同時(shí)擁有“兩個(gè)以上對(duì)象的鎖”時(shí),就可能會(huì)發(fā)生“死鎖”死鎖案例演class}class}classMakeupextendsprivateStringstaticLipsticklipstick=newstaticMirrormirror=newpublicvoidsetFlag(intflag)this.flag=}publicvoidsetGirlName(StringgirlName)this.girlName=}publicvoidrun()}*publicvoidif(flag==synchronized"try}catch(InterruptedExceptione){}synchronized"}}synchronized"try}catch(InterruptedExceptione){}synchronized"}}}}}publicclassDeadLockThreadpublicstaticvoidmain(String[]args){Makeupmakeup=newMakeup();Makeupmakeup1=newMakeup();}}死鎖問(wèn)題的解死鎖是由于“同步塊需要同時(shí)持有多個(gè)對(duì)象鎖造成”class}class}classMakeupextendsprivateStringstaticLipsticklipstick=newstaticMirrormirror=newpublicvoidsetFlag(intflag)this.flag=}publicvoidsetGirlName(StringgirlName)this.girlName=}publicvoidrun()}*publicvoidif(flag==synchronized"try}catch(InterruptedExceptione){}}synchronized"}synchronized"try}catch(InterruptedExceptione){}}synchronized"}}}}publicclassDeadLockThreadpublicstaticvoidmain(String[]args){Makeup

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論