Thông tin tài liệu:
Luồng là một thuộc tính duy nhất của Java. Nó là đơn vị nhỏ nhất của đoạn mã có thể thihành được để thực hiện một công việc nhất định. Ngôn ngữ Java, máy ảo Java cả haiđều là các hệ thống phân luồng.
Nội dung trích xuất từ tài liệu:
Giáo trình java cơ bản - Chương 8Chương8 ĐALUỒNG(Multithreading)Mụctiêu: Saukhikếtthúcchươngnày,bạncóthể: Địnhnghĩamộtluồng(thread) Môtảđaluồng Tạovàquảnlýluồng Hiểuđượcvòngđờicủaluồng Môtảmộtluồngdaemon Hiểuviệcthiếtlậpmứcưutiênluồng Giảithíchđượccầnthiếtcủasựđồngbộ Hiểuđượccáchápdụngvàocáctừkhoáđồngbộnhưthếnào Liệtkênhữngnhượcđiểmcủasựđồngbộ Giảithíchvaitròcủacácphươngthứcwait(),notify()vànotifyAll(). Môtảmộtđiềukiệnkhoáchết(deadlock) 8.1 GiớithiệuLuồnglàmộtthuộctínhduynhấtcủaJava.Nólàđơnvịnhỏnhấtcủađoạnmãcóthểthi hành được để thựchiệnmộtcôngviệcnhất định.Ngônngữ Java,máy ảoJavacả hai đềulàcáchệthốngphânluồng. 8.2 Đaluồng Javahổtrợđaluồng,nócókhảnănglàmviệcvớinhiềuluồng.Mộtứngdụngcó thểbaohàmnhiềuluồng.Mỗiluồngđượcgánmộtcôngviệccụthể,chúngđượcthựcthi đồngthờivớicácluồngkhác. Đaluồnglàmgiảmtốiđathờigiannhànrỗicủahệthống.ĐiềunàychophépbạnviếtcácchươngtrìnhcóhiệuquảcaovớisựtậndụngtốiđaCPU.Mỗiphầncủachươngtrình đượcgọimộtluồng,mỗiluồng địnhnghĩamộtcấchthựchiện. Đâylà mộttrường hợpđặcbiệtcủađanhiệm. Trongđanhiệm,nhiềuchươngchươngtrìnhchạyđồngthời,mỗichươngtrìnhcóítnhấtmộtluồngtrongnó.Mộtbộ vixử lý thựcthitấtcả cácchươngtrìnhnày.Qua đó chươngtrình đượcthựcthinhư là đồngthời,trênthựctếbộvixửlýchuyểnquachuyển lạigiữacácchươngtrình. 8.3 Tạovàquảnlýluồng KhicácchươngtrìnhJavađượcthựcthi,luồngchínhđãđangđượcthựchiện.HaiĐa luồng (Multithreading) 189yếutốquantrongluồngchính(main)là: Cácluồngconsẽđượctạoratừnó. Nó là luồngcuốicùngkếtthúcviệcthựchiện.Ngaykhiluồngchính ngừngthựcthi,chươngtrìnhbịchấmdứt. Chodùluồngchínhđượctạoramộtcáchtựđộngvớichươngtrìnhthựcthi,nócó thểđượcđiềukhiểnthôngquamộtđốitượngluồng. Cácluồngcóthểđượctạoratừhaicách: Khaibáolớplà lớpconcủalớpThread,và phươngthứcrun()củalớpThread cầnđượcđịnhnghĩađè.Vídụ: classMydemoextendsThread { publicvoidrun() { //thựcthi } } KhaibáolớpcàiđặtgiaodiệnRunnable.Rồithìđịnhnghĩaphươngthứcrun(). classMydemoimplementsRunnable { publicvoidrun() { //thựcthi } } Chươngtrình8.1sẽchỉrasựđiềukhiểnluồngchínhnhưthếnào Chươngtrình8.1 importjava.io.*; publicclassMythreadextendsThread { publicstaticvoidmain(Stringargs[]) { Threadt=Thread.currentThread(); System.out.println(ThecurrentThreadis:+t); t.setName(MyJavaThread); System.out.println(Thethreadisnownamed:+t); try{ for(inti=0;i Thread.sleep(1500); } } catch(InterruptedExceptione) { System.out.println(Mainthreadinterupted); } } } Hìnhsauđâysẽchỉrakếtquảxuấtramànhìnhcủachươngtrìnhtrên Hình8.1Luồng Trongkếtquảxuấtraởtrên [main,5,main] [main,5,main] Nhóm luồng mà nó phụ thuộc vào Quyền ưu tiên được đặt bởi JVM Tên của luồng MỗiluồngtrongchươngtrìnhJava đượccấpmộtquyền ưutiên.Máy ảoJava khôngbaogiờthayđổiquyền ưutiêncủaluồng.Quyềnưutiênvẫncònlàhằngsốcho đếnkhiluồngbịngắt. Mỗi luồng có một giá trị ưu tiên nằm trong khoảng của mộtĐa luồng (Multithreading) 191Thread.MIN_PRIORITY (=1), và đến Thread.MAX_PRIORITY (=10). Mỗi luồng thuộcvàomộtnhómluồng,v ...