You are on page 1of 12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

ng Nhp hoc ng K

Trang ch din Tm trong din n

Din Di n n mi? C g mi? Di n n

Thnh vin

Gip

Tm kim...
Bi vit hng dn JSE V Tr VIP Dnh cho gii thiu 1 kha hc Lin h: Vn Huy 0977118083 Thnh Nhn 0909569156

Tm trong din n C g mi? Trang ch Din n Bi Vit Hng Dn

Dnh cho tuyn dng nhn s CNTT Lin h: Vn Huy 0977118083 Thnh Nhn 0909569156

Java Thread - Lung trong Java


Discussion in 'Bi vit hng dn JSE' started by tranhuyvc, 22/3/10.

Jav a Thread - Lung trong Jav a

Dnh cho gii thiu kha hc Lin h: Vn Huy 0977118083 Thnh Nhn 0909569156

tranhuyvc
Administrator

Dnh cho gii thiu sn phm cng ngh Lin h: Vn Huy 0977118083 Thnh Nhn 0909569156

M u Bn tng nghe nhiu v Multithreading. Ban bit v b x l Dual core ca intel ca AMD. Bn bit rng cc cng ngh h tr vic x l song song... Bn c bit rng bn thn ngn ng Java cng h tr Multithreading. Vi bi vit ny, ti hi vng s gip cc bn tm hiu s lc v Thread trong
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 1/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

Java. Mt lnh vc kh th v. Thread C mt nh ngha v thread nh sau : Thread l mt dng cc iu khin trong mt process hay mt ng dng. Nguyn vn l : Threads are multiple flows of control within a single program or process. Vi c ch multithreading ng dng ca bn c th thc thi ng thi nhiu dng lnh cng lc. C ngha l bn c th lm nhiu cng vic ng thi trong cng mt ng dng ca bn. C th hiu mt cch ht sc n gin : h iu hnh vi c ch a nhim cho php nhiu ng dng chy cng lc. Th vi c ch a lung, mi ng dng ca bn c th thc hin c nhiu cng vic ng thi. Bn s hi ti sao khng dng nhiu processes , sao khng l multiprocessing m li cn n multithreading ? Cu tr li n gin nht l: Vic to ra v qun l cc process i hi nhiu ti nguyn ca h thng (c ram v CPU) nhiu hn rt nhiu so vi vic to ra mt thread. Trong khi bn c th ch cn to ra mt thread thc hin song song mt cng vic ht sc n gin cng vi mt cng vic chnh. Bn vit mt ng dng Java trn bt k nn tng no. Khi ng dng bn chy th thc s c mt bn sao ca JVM khi ng v ng dng ca bn l mt thread nu bn khng dng multithreading hoc l nhiu threads nu bn dng multithreading. To mt thread Nh ni, mi khi chy mt ng dng trong java th bn c mt thread. y l thread chnh, n thc thi cc dng lnh trong method : public static void main . y l mt im nhp bt buc cho mi ng dng c lp.

to ra mt thread khc ngoi thread chnh trn, Java cung cp cho chng ta hai cch : - To ra mt lp con ca lp Thread (java.lang.Thread) - To ra mt lp hin thc interface Runnable Chng ta s tm hiu ln lc hai cch trn. To mt lp con ca lp java.lang.Thread Bn khai bo nh sau : class A extends Thread { public void run() { ... // code for the new thread to execute } }
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 2/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

... A a = new A(); // create the thread object a.start(); // start the new thread executing ...

Vi cch ny cc dng lnh ca bn s c t trong method run. Method ny c override method nguyn thu ca lp Thread.

Sau bn s to ra mt i tng t lp ca bn. Bn gi phng thc start t i tng . Lc ny thread ca bn chnh thc c to ra v phng thc start s t gi method run ca bn v thc thi cc dng lnh m bn t t. Ch rng: method start l method ca h thng, n c nhiu v cp pht b nh, to ra mt thread v gi hm run ca bn. V th bn khng nn override phng thc ny. iu ny c th dn n ko to c thread. Hin thc interface Runnable Bn khai bo nh sau:

class B extends implements Runnable { public void run() { ... // code for the new thread to execute } } ... B b = new B(); // create the Runnable object Thread t = new Thread(b); // create a thread object t.start(); // start the new thread ... Cng ging nh cch trn, dng lnh ca bn t trong method run (c th gi n cc phng thc khc, nhng phi bt u trong phng thc ny) Sau bn to mt i tng B t lp hin thc interface Runnable, to thm mt i tng t ca lp Thread vi thng s cho constructor l i tng B. Sau khi bn gi phng thc t.start() th chnh thc thread c to ra v phng thc run ca bn s c triu gi mt cch t ng. Bn s hi ti cch th hai vn phi to ra mt i tng Thread. Vy ti sao li a ra hai cch hin thc lm g ? Cu tr li l :
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 3/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

- Bn thn ngn ng Java khng h tr a tha k . Bn ch c th extends t mt lp duy nht. Nhng bn li c th implements cng lc nhiu interface. Khi m lp ca bn [extends] mt lp no ri (vd : Applet), th bn ch c th implements Runnable to ra Thread. - Vic extends lp Thread c th dn n ri ro l bn override cc method start, stop, ... th c th lm cho vic to thread l khng th. Mt li khuyn l: bn nn to ra mt lp hin thc interface Runnable (cch th hai) khi mun to ra mt Thread. Chng trnh ca bn s trong sng v d tm li hn.

Cc constructor cho lp Thread public Thread () - To ra mt i tng lp Thread. - Constructor ny c tc dng ging nh Thread(null, null, gname) vi gname l mt tn c pht sinh t ng bi JVM (my o java) dng Thread-n , vi n l mt s nguyn. public Thread(Runnable target) - To ra mt i tng lp Thread. - Constructor ny c tc dng ging nh Thread(null, target, gname) vi gname l tn c pht sinh t ng bi JVM (my o java) dng Thread-n , vi n l mt s nguyn. public Thread(ThreadGroup group, Runnable target) - To ra mt i tng lp Thread. - Constructor ny c tc dng ging nh Thread(group, target, gname) vi gname l tn c pht sinh t ng bi JVM (my o java) dng Thread-n , vi n l mt s nguyn. - Constructor ny c th pht sinh mt ngoi l SecurityException nu nh thread hin ti khng c quyn to mt thread mi trong nhm group. public Thread(String name) - To ra mt i tng lp Thread. - Constructor ny c tc dng ging nh Thread(null, null, name). public Thread(ThreadGroup group, String name) - To ra mt i tng lp Thread. - Constructor ny c tc dng ging nh Thread(group, null, name). - Constructor ny c th pht sinh mt ngoi l SecurityException nu nh thread hin ti khng c quyn to mt thread mi trong nhm group. public Thread(Runnable target, String name) - To ra mt i tng lp Thread.
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 4/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

- Constructor ny c tc dng ging nh Thread(null, target, name). public Thread(ThreadGroup group, Runnable target, String name) - To ra mt i tng lp Thread. - group l nhm cc thread m thread c to mi ny s c thm vo. - target l i tng cn chy. Tc l trong i tng ny c method run, cha cc dng lnh cn thc thi ca chng ta. - name l tn ca thread. - Nu group l null v c mt b qun l bo mt security manager(ta thit lp cho JVM, mc nh th khng c) th gruop c xc nh bi method getThreadGroup ca security manager. Nu group null v khng c security manager hay phng thc getThreadGroup tr v null th group l nhm m thread ang hot ng thuc v. - Nu target l null th sau khi c khi hot, method run ca lp Thread s c gi. Nu target khng null th sau khi c khi hot th method run ca target s c gi. - u tin (priority) ca thread mi s c thit lp bng vi u tin ca thread to ra n. - Constructor ny c th pht sinh mt ngoi l SecurityException nu nh thread hin ti khng c quyn to mt thread mi trong nhm group. Chi tit hn bn c th xem Java API ca b JDK

Mt s phng thc chnh ca lp Thread

public static Thread currentThread() - Phng thc ny l mt phng thc tnh. C ngha l bn c th gi n bt u m khng cn phi to mt i tng ca lp Thread. - C php gi phng thc ny l : Thread.currentThread() - Phng thc ny tr v mt i tng ca lp Thread. i tng ny th hin cho thread m ang thc thi dng lnh ny. public long getId() - Phng thc ny tr v mt s nguyn l nh danh ca thread. - Con s ny l do my o Java (JVM) to ra. public final String getName() - Phng thc ny tr v tn ca thread. public final void setName(String name) - Thay i tn ca thread bng tn name. public Thread.State getState()
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 5/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

- Tr v trng thi hin ti ca thread. - L mt hng ca lp Thread. - Cc gi tr c th l : + NEW : thread cha c khi hot. + RUNNABLE : thread ang hot ng trong JVM. + BLOCKED : thread ch mt monitor unlock mt i tng m n cn. + WAITING : thread ch khng gii hn cho n khi mt thread khc nh thc n. + TIMED_WAITING : thread ch trong mt thi gian nht nh, hoc l c mt thread khc nh thc n. + TERMINATED : thread kt thc cng vic ca n. public static void yield() - y l mt phng thc tnh. - Phng thc ny s lm cho thread hin thi tm ngng hot ng nhng cho mt thread khc hot ng. public static void sleep(long millis) throws InterruptedException public static void sleep(long millis, int nanos) throws InterruptedException - y l mt phng thc tnh. - Phng thc ny lm cho thread hin ti ngng hot ng trong mt thi gian millis milliseconds. - Phng thc ny c th pht sinh mt ngoi l InterruptedException nu c mt thread no lm ngng hot ng thread ny. (Nhng khng hp l, tc l khng dng cc phng thc c cho php). public void start() - Phng thc ny chnh thc to ra mt i tng thread. V JVM s t ng gi phng thc run ca i tng ny nu nhng target l null. Hoc s gi phng thc run ca target nu nh target khc null. - Tuyn c bt u hot ng sau khi phng thc ny c gi thnh cng. - Phng thc ny c th pht sinh mt ngoi l IllegalThreadStateException nu thread ny c khi hot. public final boolean isAlive() - Phng thc ny kim tra xem thread c cn hiu lc hay khng (cn sng). - Mt thread cn sng khi m n c khi hot v cha kt thc cng vic ca n.
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 6/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

public final ThreadGroup getThreadGroup() - Tr v nhm Thread m thread ny thuc v public final void join(long millis) throws InterruptedException public final void join(long millis, int nanos) throws InterruptedException public final void join() throws InterruptedException - y l phng thc c gi bi mt thread khc. - Phng thc ny lm cho thread gi phi ngng hot ng v ch trong mt khong thi gian millis millisecond hoc ch trong khong thi gian millis millisecond v nanos nanosseconds, hoc ch cho n khi thread ny kt thc th mi tip tc hot ng. - Phng thc ny c th pht sinh mt ngoi l InterruptedException nu n b mt thread khc lm ngng hot ng. public String toString() - Tr v mt th hin dng String ca thread ny. - Th hin ny bao gm tn, u tin v nhm. public final void stop() public final void stop(Throwable obj) public void destroy() public final void suspend() public final void resume() - Cc methods ny u c khuyn co l khng nn dng. S b b trong cc phin bn sau ca b JRE v JDK. - Bi v cc methods ny lm cho cc monitor ca h thng (c JVM to ra gim st cc i tng ca ngi dng) b gii phng. Lm cho cc i tng khng c thng nht v dn n cc li khng mong mun, khng an ton khi s dng. Tp tin nh km DemoThreads.jar (19921 bytes): http://www.javavietnam.org/javavn/mvnforum/getattachment? attach=1535 Tp tin nh km DemoThreads.zip (26938 bytes): http://www.javavietnam.org/javavn/mvnforum/getattachment? attach=1536 phn trc , mnh gii thiu s qua v Thread v cch to mt Thread. By gi mnh s gii thiu thm mt s vn lin quan khi lp trnh vi Java Threads. Thread Group - ThreadGroup l mt lp trong gi java.lang.
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 7/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

- Lp ny cho php chng ta qun l mt nhm cc Threads cho ng dng ca chng ta. - Cc threads c gom thnh mt nhm thng thng da trn mt mi quan h no gia chng.Vd nh: ngi to ra chng, chc nng chnh ca chng, hay khi no chng s c start hay stop. To mt ThreadGroup ThreadGroup group = new ThreadGroup( "A group); Thread one = new Thread(group, one"); Thread two = new Thread(group, "two"); ...

Mt s phng thc lin quan public int activeCount() - Tr v s thread hin ti c trong ThreadGroup. public final int getMaxPriority() - Tr v u tin cao nht ca cc threads trong nhm. - Mt thread thuc nhm ny th khng th c u tin cao hn u tin cao nht ca nhm. public final void setMaxPriority(int pri) - Thit lp u tin cao nht cho nhm. - pri phi nm trong khong Thread.MIN_PRIORITY Thread.MAX_PRIORITY . public final void checkAccess() - Kim tra xem thread ang chy c quyn thay i nhm thread ny hay khng. public final boolean isDaemon() - Kim tra xem nhm c phi l nhm cc Daemon Thread hay khng. - Daemon thread s c cp ti. public final void setDaemon(boolean daemon) - Thit lp nhm thread l Daemon Thread.

Chi tit hn bn c th xem Java API

Thread Priority - Mi mt thread trong java u c mt u tin nht nh. - u tin ny nm trong khong Thread.MIN_PRIORITY (0) v MAX_PRIORITY (10).
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 8/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

- u tin ca mt thread c to ra s mc nh l bng vi u tin vi thread to ra n. - Vic thit lp cng nh ly v u tin ca mt thread c thc hin thng qua hai phng thc: + public final void setPriority(int newPriority) + public final int getPriority() Daemon Thread - Mi thread u c th l Daemon Thread. - Daemon threads l cc threads c nhim c cung cp dch v cho cc threads khc cng hot ng trong cng mt process. - Mt iu quan trng l : my o JVM s t kt thc hot ng nu nh tt c cc thread trong ng dng u l Daemon Threads. Mt cu hi t ra l : Ti sao li cn Daemon Thread trong khi thread bnh thng vn c th cung cp dch v cho thread khc? Tr li : - V d bn c mt thread A c nhim v cung cp dch v trao i d liu vi mt my khc t xa thng qua mng internet. Khi thread A phi c nhim v ch yu cu trao i d liu t mt thread no . Vy bn khng bit lc no s c yu cu trao i d liu, khi no s khng cn yu cu no na. - Khi thit lp A l Daemon thread th khi chc chn khng cn yu cu no na, tc l khng cn thread no s dng dch v ny na. JVM s kt thc hot ng ca thread A v kt thc hot ng ca ng dng. - thit lp v kim tra mt thread c phi l Daemon Thread hay khng bn c th dng : +public final void setDaemon(boolean on) + public final boolean isDaemon()

Synchronization - Khi to ra nhiu thread hot ng song song c lp (tc l khng c d liu chia s) th khng c vn g. - Tuy nhin khi hai hay nhiu thread cng s dng chung mt bin hay mt phng thc th : bi v cc thread trong mt Process c th c thc thi ng thi (h thng nhiu CPU) hoc c lun phin gi trong mt thi gian rt ngn (h thng n CPU) cho nn vic s dng d liu chia s l gn nh ng thi. iu ny dn n vn v : Race condition. - Race condition (tm dch l iu kin tranh chp) : xy ra khi c hai hy nhiu thread cng chia s d liu, v khi chng cng c , cng ghi d liu chia s ng thi. Kt qu nhn c s ph thuc vo tc ng ln bin chia s l ci g v lc no. V ngi lp trnh khng th bit c chnh xc iu g xy ra. - Java a ra mt cch gii quyt l dng t kho synchronized cho
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 9/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

phng thc hay on m m bn cn bo v . Synchronized Method Bn khai bo nh sau : public synchronized void protectedMethod(object obj) - Method protectedMethod s c m bo thc thi tun t. - Ngha l khi c 2 thread A v B gi method protectedMethod th nu method A gi trc th khi no method protectedMethod thc thi xong th thread B mi c gi. V trong thi gian th thread B phi ch. V d: class Test { static int i = 0, j = 0; static void one() { i++; j++; } static void two() { System.out.println("i=" + i); //Do something System.out.println("j=" + j); } }

- Khi thread A gi method one. Thread B gi method two. - Nhng khong gi hai dng lnh xut method B lm mt cng vic g kh lu. Trong khong thi gian method A c th c gi nhiu ln. - Khi gi tr i v j c xut ra l khng theo bn. Tc l gi tr j s ln hn gi tr i. Bn c "cm gic" j c cng trc i ( thc t i vn c cng trc). - m bo i v j c xut ra c gi tr lun bng nhau. Ta dng t kho synchronized nh sau class Test { static int i = 0, j = 0; static synchronized void one() { i++; j++; } static synchronized void two() { System.out.println("i=" + i); //Do something System.out.println("j=" + j);
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 10/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

} }

- Khi cho d method two thc hin mt cng vic lu n th no th method one s khng c gi ln na cho n khi method two thc hin xong. - S d ta c kt qu nh vy v bi v khi method two c gi th t kho synchronized se khin cho i tng ca lp Test b kho. Khi mt thread khc khng th s dng i tng ny na (gi method two hay one) v thread ny phi ch.

Synchronized Statements

- Bn khai bo nh sau :

synchronized (someObject) { // this code will execute in one thread at a //time and someObject will be locked. }

- i tng someObject s b kho v on m trong khi ny s c thc thi tun t. Tun t y c ngha l nu c 2 thread cng thc thi on m trn th nu A n trc th A thc thi xong th B mi c thc thi. - Ch rng ch c on m trong khi ny mi c thc thi tun t (tun t theo ngha trn). Wait and Notify - Nh bn bit bn thn ngn ng Java h tr multithreading. iu ny c thy r rng nht thng qua vic lp Object c cc phng thc wait() , notify() v notifyAll(). - Nh phn trc ni t kho synchronized s lm cho mt i tng b kho v cc thread khc phi ch nu mun s dng i tng ny. - Vy nu thread A kho i tng obj nhng trong qu trnh x l ca n A cn obj c cp nht bi mt thread B khc, ri da trn gi tr ny A mi x l tip. - Phng thc wait() cho php ta lm iu ny. - wait() lm cho thread hin ti (thread ang kho i tng obj) phi tm ngng hot ng, ng thi i tng obj tm thi c m kho v cho php cc thread khc trong hng i s dng obj c hot ng. - notify() s lm cho mt thread ang ch kt qu t obj (thread gi wait()) s c thc thi tip (tip tc kho obj). Vi phng thc notify() th thread c chn nh thc l ngu nhin tu . do c th dn n deadlock.
congdongjava.com/forum/threads/java-thread-lung-trong-java.714/ 11/12

18/07/2012

Java Thread - Lung trong Java | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java ME, Java E

- notifyAll() s lm cho tt c cc thread ch c hot ng (do obj b kho) s u c c hi hot ng. iu ny s gim thiu ri ro cho vic chn ngu nhin mt thread trong hng i. Trn y l mt s vn khi lp trnh Java Thread -----------------------Theo JavaVietNam
tranhuyvc, 22/3/10 #1

: Java Thread - Lung trong Java Cm n bn. Bi vit rt hay ! ^_^ !

hunginf, 3/11/10

#2

hunginf
New Member

: Java Thread - Lung trong Java bi vit rt k lng v hay !

anhtuank7c, 10/12/10

#3

anhtuank7c
Member

: Java Thread - Lung trong Java Vy mnh mun vit chng trnh qun l processer bng Thread c khng . Mnh mi hc java nn c hi g [MARQUEE]bun ci mong bn thng cm [/MARQUEE].Thks bn trc.
lvthanhdh10, 16/1/12 #4

lvthanhdh10
New Member

: Java Thread - Lung trong Java cm n chia s bi vit. Nhng m sao li copy li t javavietnam.org?

javan, 5/4/12

#5

javan
New Member

(Bn phi ng k thnh vin hoc ng nhp vo din n nu mun tr li bi vit ny.)

Chia s trang ny
Tw eet 0 Recommend Be the first of your friends to recommend this.

Trang ch

Din n

Bi Vit Hng Dn

Bi vit hng dn JSE

Vietnamese (VI) Forum software by XenForo 2011 XenForo Ltd.

Lin h vi Chng ti Trang ch Top iu khon & Quy nh Global Feed

congdongjava.com/forum/threads/java-thread-lung-trong-java.714/

12/12

You might also like