19
Java Thread

Java Thread

  • Upload
    -

  • View
    4

  • Download
    0

Embed Size (px)

DESCRIPTION

Java Thread for beginners

Citation preview

Page 1: Java Thread

Java

Thread

Page 2: Java Thread

Mul$tasking

•  Mul$taskingallowsseveralac$vi$estooccurconcurrentlyonthecomputer

•  Levelsofmul$tasking:– Process-basedmul1tasking

•  Allowsprograms(processes)torunconcurrently

– Thread-basemul1tasking(mul1threading)•  Allowspartsofthesameprocess(threads)torunconcurrently

2

Page 3: Java Thread

Mul$tasking

•  Advantagesofmul$threadingoverprocess-basedmul$tasking–  Threadssharethesameaddressspace–  Contextswitchingbetweenthreadsisusuallyinexpensive–  Communica$onbetweenthreadisusuallyinexpensive

•  Javasupportsthread-basedmul/taskingandprovideshigh-levelfacili$esformul/threadedprogramming

3

Page 4: Java Thread

MainThread

•  WhenaJavaprogramstartsup,onethreadbeginsrunningimmediately

•  Thisiscalledthemainthreadoftheprogram•  Itisthethreadfromwhichthechildthreadswillbespawned

•  OJen,itmustbethelastthreadtofinishexecu$on

4

Page 5: Java Thread

MainThread

5

Page 6: Java Thread

HowtocreateThread

1.  Byimplemen$ngRunnableInterface2.  ByextendingtheThreadclassitself•  Implemen'ngRunnable–  Needtoimplementthepublicvoidrun()method

•  ExtendingThread–  Needtooverridethepublicvoidrun()method

•  WhichoneisbeSer?

6

Page 7: Java Thread

Implemen$ngRunnable

7

Page 8: Java Thread

ExtendingThread

8

Page 9: Java Thread

Mul$pleThreads

•  Itispossibletocreatemorethanonethreadinsidethemain

•  Inmul$plethreads,oJenyouwillwantthemainthreadtofinishlast.Thisisaccomplishedby–  usingalargedelayinthemainthread–  usingthejoin()method

•  WhetherathreadhasfinishedornotcanbeknownusingisAlive()method

•  Example:Mul'pleThreads.java,JoinAliveThreads.java

9

Page 10: Java Thread

Thread States

10

Page 11: Java Thread

ThreadPool

•  ThreadPoolsareusefulwhenyouneedtolimitthenumberofthreadsrunninginyourapplica$on–  Performanceoverheadstar$nganewthread–  Eachthreadisalsoallocatedsomememoryforitsstack

•  Insteadofstar$nganewthreadforeverytasktoexecuteconcurrently,thetaskcanbepassedtoathreadpool–  Assoonasthepoolhasanyidlethreadsthetaskisassignedtooneofthemandexecuted

11

Page 12: Java Thread

ThreadPool

•  ThreadpoolsareoJenusedinmul$threadedservers–  Eachconnec$onarrivingattheserverviathenetworkiswrappedasataskandpassedontoathreadpool

–  Thethreadsinthethreadpoolwillprocesstherequestsontheconnec$onsconcurrently

•  JavaprovidesThreadPoolimplementa$onwithjava.u/l.concurrent.ExecutorService

12

Page 13: Java Thread

ExecutorService

13

Page 14: Java Thread

Synchroniza$on

•  Whentwoormorethreadsneedaccesstoasharedresource,theyneedsomewaytoensurethattheresourcewillbeusedbyonlyonethreadata$me

•  Theprocessbywhichthisisachievediscalledsynchroniza1on

•  Keytosynchroniza$onistheconceptofthemonitor•  Amonitorisanobjectthatisusedasamutuallyexclusivelock–  Onlyonethreadcanownamonitoratagiven$me

14

Page 15: Java Thread

Synchroniza$on

•  Whenathreadacquiresalock,itissaidtohaveenteredthemonitor

•  AllotherthreadsaSemp$ngtoenterthelockedmonitorwillbesuspendedun$lthefirstthreadexitsthemonitor

•  Theseotherthreadsaresaidtobewai$ngforthemonitor

15

Page 16: Java Thread

Synchroniza$on

•  Twowaytoachievesynchroniza$on.•  Synchronizedmethod

synchronizedvoidcall(Stringmsg){}•  Synchronizedblock

publicvoidrun(){ synchronized(target){target.call(msg);}}

•  Example:SynchronizedBlock.java,SynchronizedMethod.java,Synchroniza'onLock.java

16

Page 17: Java Thread

InterThreadCommunica$on

•  Onewayistousepolling–  aloopthatisusedtochecksomecondi$onrepeatedly–  Oncethecondi$onistrue,appropriateac$onistaken

•  Javaincludesanelegantinterthreadcommunica$onmechanismviathewait(),no1fy()andno1fyAll()methods

•  ThesemethodsareimplementedasfinalmethodsinObject,soallclasseshavethem

•  Allthreemethodscanbecalledonlyfromwithinasynchronizedmethod

17

Page 18: Java Thread

InterThreadCommunica$on•  wait()–  tellsthecallingthreadtogiveupthemonitorandgotosleepun$lsomeotherthreadentersthesamemonitorandcallsno$fy()

•  no/fy()–  wakesupthefirstthreadthatcalledwait()onsameobject

•  no/fyAll()–  wakesupallthethreadsthatcalledwait()onsameobject.Thehighestprioritythreadwillrunfirst

•  Example:IncorrectPC.java,CorrectPC.java,PCBlockingQueue.java

18

Page 19: Java Thread

Suspend,ResumeandStop

•  Suspend–  Threadt;t.suspend();

•  Resume–  Threadt;t.resume();

•  Stop–  Threadt;t.stop();–  Cannotberesumedlater

•  suspendandstopcansome$mescauseserioussystemfailures

•  Example:SuspendResume.java19