• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Concorrência com Java
 

Concorrência com Java

on

  • 2,637 views

 

Statistics

Views

Total Views
2,637
Views on SlideShare
2,611
Embed Views
26

Actions

Likes
0
Downloads
60
Comments
0

4 Embeds 26

http://blogs.sun.com 12
https://blogs.oracle.com 6
http://blogs-dev.oracle.com 5
http://blogs.oracle.com 3

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Concorrência com Java Concorrência com Java Presentation Transcript

    • Programação Concorrente com Java Elenilson Vieira Embaixador de Campus da Sun Universidade Federal da Paraíba blogs.sun.com/elenilsonvieira elenilson.vieira@sun.com 1
    • Agenda – Parte 1 (Introdução) 1 – Introdução 2 – Motivação 3 – Arquitetura de Sistemas 4 – Tipos de Concorrência 5 – Programas e Processos 6 – Problemas com Concorrência 2
    • Agenda – Parte 2 (Threads) 1 – Características 2 – Threads em Java 3 – Classe Threads 4 – Interface Runnable 5 – Programas e Processos 6 – Threads x Runnable 7 – Terminando Threads 8 – Prioridades 9 – Gerenciamento de Threads 10 – Ciclo de Vida 3
    • Agenda – Parte 3 (Exclusão Mútua) 1 – Seção Crítica 2 – Exclusão Mútua 3 – Execução Concorrente 4 – Implementando Exclusão Mútua 5 – Variáveis booleana compartilhada 4
    • Agenda – Parte 4 (Sincronização) 1 – Introdução 2 – Semáforos - Tipos de Semáforo - Exclusão Mútua com Semáforo - Semáforo em Java - Problema Produtor-Consumidor - Sincronização com Semáforo 3 – Monitores - Introdução - Monitores x Semáforos - Monitores em Java - Métodos Sincronizados - Trechos de Código Sincronizado - Perigo de Deadlock - Problema Produtor-Consumidor 5
    • Perguntas? Sun  onfdental I er   nl C i i : nt nalO y 6
    • Começando a brincadeira... Footnote position, 12 pts. Sun  onfdental I er   nl C i i : nt nalO y 7
    • Introdução 8 7
    • Agenda – Parte 1 (Introdução) 1 – Introdução 2 – Motivação 3 – Arquitetura de Sistemas 4 – Tipos de Concorrência 5 – Programas e Processos 6 – Problemas com Concorrência 9 8
    • • Pr am a  ogr Sequenci al > N ão  ai que  a  m s  um operação  acont ece      em um dado  om ent m o > É  decor ent da or a  r e  f m com o  contol é  o  r e  passado    em seqüênci ente  a  r com andos > C ada  com ando  deve    serconcl do  es  uí ant do  pr m o  óxi com ando ni ar i ci • Pr am a  oncor ent ogr C r e > É  hábi  r i   ai que  a  la ealzarm s  um operação    em um   dado  om ent m o Footnote position, 12 pts. Sun  onfdental I er   nl C i i : nt nalO y 10
    • • C oncor ênci r a > C oncor ênci não  um a ar a rvi r a  é  t ef ti al > Tor a  ogr ação  ai dií l na  pr am m s  fci > D ii t a ealzação  fcula  r i dos est t es > R eduz  ef i dade  a  etvi dos est t es Pr am as  ogr seqüenci s  ai são azoavel ent ent r m e  endí s vei C om pl dade  pr exi é  opor onalao am anho ci   t Pr am as  ogr concor ent em   alnão r es  ger   com pariham  ai car erstcas tl t s  act í i Sun  onfdental I er   nl C i i : nt nalO y 11
    • Motivação Escreverpr am as  r os  dií l   ogr cor et é  fci Escreverpr am as    ogr concor ent cor et é r es  r os  m uio  ai dií l t m s  fci Porque  desenvol   ogr as  verpr am concor ent r es? Sun  onfdental I er   nl C i i : nt nalO y 12
    • Footnote position, 12 pts. Sun  onfdental I er   nl C i i : nt nalO y 13
    • Motivação • Busca  m ai   de  ordesem penho • R epresent ação  aspect concor ent de  os  r es  do  undo eal m r • D esenvol m ent de  quiet as  vi o  ar t ur de  com putador concor ent es  r es Sun  onfdental I er   nl C i i : nt nalO y 14
    • Arquiteturas de Sistemas • Si em a  uliar a st M tt ef > Per ie  i pr m t város  ocessos  com parihar   tl em o  processador > C om pariham ent baseado  di são  t po tl o  na  vi do em > C oncor ênci de  ocessam ent e  r r a  pr o  entada/ da saí R R R R R Processo Processo Processo Processo e SO e e e e g g 1 g 2 g 3 g 4 3 4 1 R e C PU g 2 Sun C onfi i : InternalO nl dental   y 15
    • Arquiteturas de Sistemas • Si em a  uli ocessador st M tpr > Al oca  ocessos  pr nos  i pr város  ocessadores > Tam bém   acont ece  com pariham ent de  o  tl o  processadores M em óra i Global C PU C PU C PU M em óra i M em óra i M em óra i Local Local Local Sun  onfdental I er   nl C i i : nt nalO y 16
    • Arquiteturas de Sistemas • Si em as  i rbuí st D sti dos > C onsi e  város  st de  i com put ador que  es  oper   am i ndependent ent m as  em e  que  com uni se  cam > Provê  ai   m ordesem penho  egado  i em ent a  agr e ncr a  confabii i ldade C PU M em óra i Local C PU C PU M em óra i M em óra i Local Local C PU M em óra i C i Local O y Sun  onfdental I er   nl i : nt nal 17
    • Agenda – Parte 1 (Introdução) 1 – Introdução 2 – Motivação 3 – Arquitetura de Sistemas 4 – Tipos de Concorrência 5 – Programas e Processos 6 – Problemas com Concorrência 18 17
    • Tipos de Concorrência • C oncor ênci Fí ca par elsm o) r a  si ( al i > C ada  dade  execut uni é  ada      em um processadordedi   cado • C oncor ênci Lógi r a  ca > Processadoré    chaveada  um a  dade  de  uni par outa a  r > C ausa  i pr a m essão  que  uni as  dades  execut   m ulaneam ent am si t e Sun  onfdental I er   nl C i i : nt nalO y 19
    • Programas e Processos • Processo  Sequenci al > É    um conj o ot m ent or unt t al e  denado  passos de  > D ado  quai squerdoi passos  sem pr   s  é  e  possí  ndi   veli carqualé  prm eio   o  i r > C ada  passo  sendo  a  udança  est um m de  ado  em   gum   al com ponent do  st a  e  si em de  com putação Sun  onfdental I er   nl C i i : nt nalO y 20
    • Programas e Processos • Pr am a  ogr Sequenci al > Especii as  fca  possí s  udanças  est vei m de  ado  de    ocesso  um pr seqüenci al > Estut a  contol do  ogr a  er i a  r ur de  r e  pr am det m na  ordem   execução de  > Ações  são  denadas  as egr de  or pel r as  seqüenciação  lnguagem   pr am ação  da i de  ogr adotada – D efne  i com o  contol é  o  r e  passado  com ando  de  a  com ando Sun  onfdental I er   nl C i i : nt nalO y 21
    • Programas e Processos • Pr am a  oncor ent ogr C r e > Especii as  fca  possí s  udanças  est vei m de  ado  de  s  m ai pr doi ou  s  ocessos  seqüenci s ai > N enhum a  dem   i plciam ent defni or é m i t e  i da  ente  m udanças  est r as  de  ados  dos  ocessos pr > Processos  são  t execut   dios  ar concor ent ent r em e > Processos  podem   é  esm o  at m execut   ar si ulaneam ent m t e Sun  onfdental I er   nl C i i : nt nalO y 22
    • Problemas com Concorrência • D et m i sm o  N ão­ et m i sm o er ni x  D er ni > Pr am as  ogr seqüênci cor et são  as  r os  det m i stcos er ní i – Seguem   a  um seqüênci de  a  passos  que  pode    ser com pl am ent r oduzi em   úli as  et e epr da  m tpl execuções com   m esm os  os  dados  entada de  r > D et m i sm o or possí   ii   valdar er ni t na  velverfcare  i   pr am as  a est ogr vi t es Sun  onfdental I er   nl C i i : nt nalO y 23
    • Problemas com Concorrência • D et m i sm o  N ão­ et m i sm o er ni x  D er ni > U m   ogr a  pr am concor ent é  r e  não­ er i stco det m ní i – U ni dades  execução  osseguem     a  dem   de  pr em um or não  predefni i da > N ão  possí   edi   seqüênci de  é  velpr zera  a  passos  que  é  r i ealzada  o esulado i ou  r t fnal > M úli as  tpl execuções  pr am a  do  ogr concor ent com   r e  os  m esm os  dados  entada  de  r podem   arr ger  esulados  t dier es f ent > Sequênci de  a  passos  r e esulado i   t fnaldependem   do  escal onam ent i er o nt no Sun  onfdental I er   nl C i i : nt nalO y 24
    • Problemas com Concorrência • D et m i sm o  N ão­ et m i sm o er ni x  D er ni > U m   ogr a  pr am concor ent i r e ncor et ... r o    – Pode ero  t   com poram ent esper t o  ado  gr a  ande  ai i m ora  das  vezes – Pode  f m a nt m ient e r epr de or i er t e  ir odutveldesvi ­ í   ar se  do  com poram ent nor al t o  m > Er os  pr am ação  r de  ogr concor ent são  uio  fcei de  r e  m t dií s  di agnostcar i > N ão­ er i sm o  um   det m ni é  pont chave  pr am ação  o  da  ogr concor ent r e > Tor bast e  fci  pr am ação na  ant dií la  ogr Sun  onfdental I er   nl C i i : nt nalO y 25
    • Problemas com Concorrência • D ependênci de  oci a  Vel dade > U m   ogr a  pr am seqüenci   i alé ndependent da  oci e  vel dade – C or et r ude  não  depende  vel dade  execução da  oci de  > R esulado  um   ogr a  t de  pr am concor ent é  r e  dependent e  da  oci vel dade – D epende  vel dade el i com   da  oci r atva  que  pr os  ocessos  seqüenci s  ai constt nt são  iui es  execut ados – Pequenas l uações andôm i na  oci fut r cas  vel dade  do  processadore  sposii de  r   di tvos  entada/ da  saí podem   l evarao    não­ er i sm o det m ni Sun  onfdental I er   nl C i i : nt nalO y 26
    • Problemas com Concorrência • D ependênci de  oci a  Vel dade > Q uando  r os esulados  t são  dependent da  es  vel dade  z­ que  st um a  oci di se  exi e  condi ção  de  cor i ( ace  rda r condii ton) – R esulados  t podem    m pr sí s seri evi vei P: s := “ABCDE” Q: s := “FGHIJ” s = “ABCDE” s = “FGHIJ” s = “ABHIE” Sun  onfdental I er   nl C i i : nt nalO y 27
    • Problemas com Concorrência • D ependênci de  oci a  Vel dade > R equera   adoção  conceio  at i dade do  t de  om ci – U m a  i varávelé  ôm i quando  i   at ca  é nspecionada  e  at i ualzada sem  qual queri er upção   nt r no  processam ento > At i dade  om ci não esol o  obl a  al r ve  pr em ger LD reg, i LD reg, i P: i := i + 1 INC reg ML reg, 2 Q: i := 2 * i ST i, reg ST i, reg i = 2 i = 1 i = 0 Sun  onfdental I er   nl C i i : nt nalO y 28
    • Problemas com Concorrência • D eadl ock > D oi ou  ai pr s  m s  ocessos  encontam ­ i possi lt r se m biiados  de azerqual f   querpr esso  pr   ogr no  ocessam ent o > G erado   unção  em f das  út m uas  dem andas  i ncom patvei porr í s   ecursos > Pode  ocor erse  som ent se  segui es  r   e  e  as  nt condi ções  são  i eias satsf t – Excl usão  út M ua – Aqui ção ncr ent si I em al – N ão  eem pção Pr – Esper C icul a  r ar Sun  onfdental I er   nl C i i : nt nalO y 29
    • Problemas com Concorrência • D eadl ock > Excl usão  út M ua – Processos  possuem   acesso  usi aos ecur excl vo  r sos P1 R P2 Enquant um   ocesso erdados  t ado, o  pr l   do ecl   não az  f sentdo  m ii  r pr i per trouto  ocesso usaro    t ado  m esm o em po ecl ao  t Sun  onfdental I er   nl C i i : nt nalO y 30
    • Problemas com Concorrência • D eadl ock > Aqui ção ncr ent si I em al – Processo  ant  ecur m ém r sos  evi ent adquii pr am e  rdos  enquant aguar porouto ecur o  da    r r so P1 P2 R1 R2 R3 Enquant um   ocesso  o  pr esper pel D VD ,não  a  o    f sentdo i aro  az  i lber   scannerpr am ent   evi e  adquii par copi   rdo  a  ardados  e  a  D VD del par o  Sun  onfdental I er   nl C i i : nt nalO y 31
    • Problemas com Concorrência • D eadl ock > N ão  eem pção Pr – R ecursos  não podem    em ovi serr dos  um   de  processo  é  at que  am   unt i ent lber sej vol aram e i ados P2 U m   qui al ar vo  ocado  um   a  dado  ocesso  pr não pode  P1 R serlber  i ado  é  at que  oper ações  at i de  ualzação  sej   am concl das uí Pn Sun  onfdental I er   nl C i i : nt nalO y 32
    • Problemas com Concorrência • D eadl ock > Esper C icul a  r ar – Pode  strum   cl de ecur exi i  ci o  r sos  pr e  ocessos no  qualcada  ocesso  á    pr est aguardando ecur r sos que  são  antdos  o  óxi o  ocesso  ci o m i pel pr m pr no  cl P1 Processo  m ant     P1  ém um D VD ,que  r   é equerdo  o  i pel processo   P2,que,porsua      R1 R2 vez,m ant       ém um scanner , que  r é equerdo  o  i pel processo P1 P2 Sun  onfdental I er   nl C i i : nt nalO y 33
    • Problemas com Concorrência • R esol vendo  eadl D ocks >I gnor   assum i  are  rque  não ocor e r – U suáro r a  f m a  ai conveni e  i tat da or m s  ent que  encontar r – Em   alé r ado ei ci i ger   tat r ni alzando  si em a o  st Sun  onfdental I er   nl C i i : nt nalO y 34
    • Problemas com Concorrência • R esol vendo  eadl D ocks > Per ii  m trocor er   as  ect   cor i r r ,m det are  rgi  aut atcam ent om i e – M ant   si em a  ém o  st com o   odo unci um t f onando – Pode epr r esent   at   ocessos  arm arpr envol dos vi – Pode  adot   conceio  r lback aro  t de ol  – R est a  pr aur os  ocessos  um   a  pont ant i   deadl o  erorao  ock – Adot o  a  conceio  checkpoi   a  ar   pont t de  ntpar m caros  os  de et no r or Sun  onfdental I er   nl C i i : nt nalO y 35
    • Problemas com Concorrência • R esol vendo  eadl D ocks > Preveni em ovendo  a  m ai pr condi rr um ou  s  é­ ções – Elm i   aqui ção ncr ent ,r i nara  si i em al equi t siando odos  t os  recursos    em conj o unt – Alocação  eci ant pada  pode  arpobr utlzação  ger   e  ii de  recursos – Elm i   esper i em ent ,i pondo  a  i nara  a ncr al m um seqüênci a  úni par r ca  a equi ção  si dos ecur r sos – Seqüênci bem   eci a  sel onada  pode  arm el   ger   hor utlzação ii – N ão  a  ger boa  ii utlzação  r de ecursos   odos  casos em t os  – I põe  sci i na  ogr ação m di plna  pr am Sun  onfdental I er   nl C i i : nt nalO y 36
    • Problemas com Concorrência • St vaton ar i > Processo  i é ndefni i dam ent i pedi de  e m do  execut   ar em  unção  escal f de  onam ent i ust o nj o – Saf y et – C oi r ns  sas ui não  acont ecem – Li veness – C oi boas  sas  event m ent acont ual e  ecem – Processo ar al f á  gum   ogr pr esso      em um dado nt val i er o  de em po t > Som ent pode    t e  sereviado  o  st a  lvr de  se  si em é i e  deadl e  ock  adot um   a  escal onam ent j o o ust Sun  onfdental I er   nl C i i : nt nalO y 37
    • Problemas com Concorrência • St vaton ar i > Escal onam ent Just o  o – Processo  col é  ocado    a ia  em um fl associ ada  ao  recur r so equi t siado – Se ecur t na­ di r so or se  sponí ,um   ocesso  fl vel  pr na ia  event m ent ganha  acesso  r ual e  o  ao ecurso > Escal onam ent I ust o nj o – Acesso  ef enci   pr pr er ala  ocessos  ala  i i de  t prordade – Pode et dari r ar  ndefni i dam ent um   ocesso  e  pr de  bai prordade xa  i i Sun  onfdental I er   nl C i i : nt nalO y 38
    • Agenda – Parte 1 (Introdução) 1 – Introdução 2 – Motivação 3 – Arquitetura de Sistemas 4 – Tipos de Concorrência 5 – Programas e Processos 6 – Problemas com Concorrência 39 37
    • Threads 40 38
    • Agenda – Parte 2 (Threads) 1 – Características 2 – Threads em Java 3 – Classe Threads 4 – Interface Runnable 5 – Programas e Processos 6 – Threads x Runnable 7 – Terminando Threads 8 – Prioridades 9 – Gerenciamento de Threads 10 – Ciclo de Vida 41 39
    • Características • Per ie  úli as i m t m tpl lnhas  fuxo  contol de  de l de  r e  pr am a  ogr coexi i      co  ocesso strem um úni pr • C om pariham  ecur tl r sos  um   ocesso de  pr > Espaço  ender de  eços  pr do  ocesso • C ada hr t ead possuiseu    contadorde  ogr a    pr am i vi ndi dual  l e  i ,piha  varávei l s s ocai • C om uni cação  a  em óra  vi m i com parihada tl • Tam bém  denom i nado  ocesso eve lght ei   pr l (i w ght process) Sun  onfdental I er   nl C i i : nt nalO y 42
    • Características • Em   onopr m ocessador ... es    > Processadoré    com parihado  r os hr tl ente  t eads > Si em a  st oper onalr i o  aci  ealza  escal onam ent o  de hr t eads  um   ocesso de  pr > Threads  não  são  execut ados  si ulaneam ent m t e > Provê  supore  concor ênci l ca,baseada  t a  r a ógi   na  vi di são  t po tm e  i ng) do em (i slci Sun  onfdental I er   nl C i i : nt nalO y 43
    • Características • Em   uli ocessador ... m tpr es    > C ada hr t ead  pode    ocado  um   seral a  processador > Si em a  st oper onalr i o  aci  ealza  escal onam ent o  e  ocação  t eads  pr al de hr a  ocessadores > Threads  podem     serexecut ados  si ulaneam ent m t e > Provê  supore  concor ênci fsi t a  r a í ca Sun  onfdental I er   nl C i i : nt nalO y 44
    • Características • Execut   m ulânea  assi onam ent am si t e  ncr e > Threads  podem   odii   i m fcarvarávei s  com parihadas  tl com   r t eads outos hr > Pode  oduzi esulados m pr sí s pr rr t i evi vei • R equera    adoção  m ecani os  de  sm explcios  si oni í t de  ncr zação Sun  onfdental I er   nl C i i : nt nalO y 45
    • Threads em Java • Java  supora  t concor ênci a  velde i r a  ní   lnguagem > A i lnguagem     C supora  t concor ênci em   r a  bi i ecas  f blot de unções • Adot um   odel pr a  m o  eem ptvo  execução i de  > I er os  pr nt val do  ocessadorsão  ocados    al aos  t eads      odel r hr em um m o ound­ obi r n • Supora  conceio  prordade t o  t de  i i • I pl ent m em ado  cl na  asse  ead  na nt f Thr e  i erace  R unnabl e  Sun  onfdental I er   nl C i i : nt nalO y 46
    • Threads em Java • Todo  ogr a  pr am consi e  pel m enos  st de  o  um  hr t ead  que  execut o  ét a  m odo  main > t ead  i pal( ai t ead) hr prnci  m n hr • O utos hr r t eads nt nos  i er podem     i sercrados  i er nt nam ent pel JVM e  a  > D epende  cada m pl ent de  i em ação  JVM de  • O utos hr r t eads  ní   usuáro  a  velde  i podem   serexplciam ent crados  o  ogr a   it e  i pel pr am Sun  onfdental I er   nl C i i : nt nalO y 47
    • Classe Thread • D eve­ est se  endera  asse    cl Thread • Sobreporo  ét   m odo  run > M ét odo  execut ado  quando  t ead  i ci o hr é ni ado • I anci     város  et t ead nst arum ou  i obj os hr • Atvaro  ét i   m odo  dos  et t ead  a ni aros hr start  obj os hr par i ci   t eads  cor espondent r es public class HelloWorldThread extends Thread { public void run() { System.out.println(“Hello World”); } public static void main(String[] args) { HelloWorldThread t = new HelloWorldThread(); t.start(); } Sun  onfdental I er   nl C i i : nt nalO y 48
    • Classe Thread class MyThread extends Thread { private String message; public MyThread(String m) {message = m;} public void run() { for(int r=0; r<20; r++) System.out.println(message); } } public class ThreadDemo { public static void main(String[] args) { MyThread t1,t2; t1=new MyThread("primeiro thread"); t2=new MyThread("segundo thread"); t1.start(); t2.start(); } } Sun  onfdental I er   nl C i i : nt nalO y 49
    • Interface Runnable • D eve­ i pl ent   i erace  se m em ara nt f Runnable • I pl ent   m ét m em aro  odo run > M ét odo  execut ado  quando  t ead  i ci o hr é ni ado • I anci     város  et t ead nst arum ou  i obj os hr • Atvaro  ét i   m odo  start dos  et t ead  a ni aros  obj os hr par i ci   t eads  r hr cor espondent es public class HelloWorldThread implements Runnable { public void run() { System.out.println(“Hello World”); } public static void main(String[] args) { HelloWorldThread h = new HelloWorldThread(); Thread t = new Thread(h); t.start(); } Sun  onfdental I er   nl C i i : nt nalO y 50
    • Interface Runnable class MyThread implements Runnable {    private String message;    public MyThread(String m) {message = m;}    public void run() {       for(int r=0; r<20; r++)          System.out.println(message);    } } public class ThreadDemo {    public static void main(String[] args) {       MyThread r1,r2;       Thread t1, t2;       r1=new MyThread("primeiro thread");       r2=new MyThread("segundo thread");       t1 = new Thread(r1);       t2 = new Thread(r2);       t1.start();       t2.start();    } } Sun  onfdental I er   nl C i i : nt nalO y 51
    • Threads x Runnable • Estendera  asse    cl Thread m possi lt i biia  herança  outa  asse de  r cl > Java  não  supora  ança  úli a t her m tpl • I pl ent   i erace  m em ara nt f Runnable  per ie  her m t a  ança  outa  asse de  r cl > Java  m ie  prm ii per t as  i tvas  e  extends  implements  em   ser usadas  conj am ent unt e Sun  onfdental I er   nl C i i : nt nalO y 52
    • Agenda – Parte 2 (Threads) 1 – Características 2 – Threads em Java 3 – Classe Threads 4 – Interface Runnable 5 – Programas e Processos 6 – Threads x Runnable 7 – Terminando Threads 8 – Prioridades 9 – Gerenciamento de Threads 10 – Ciclo de Vida 53 51
    • Terminando Threads • U m  hr t ead er i quando  m ét t m na  o  odo  é  run  concl do uí > M ét odo  run et na  m al ent r or nor m e > M ét odo  run ança  a  l um exceção  não  capt ada ur • Threads  não  podem    ei ci i serr ni alzados > I nvocaro  ét   m odo  start  ai que  a  m s  um vez  a  ger a  exceção  InvalidThreadStateException • M étodo isAlive  pode    serusado  a  ii   par verfcar se  t ead  o hr não oit m i f  er nado Sun  onfdental I er   nl C i i : nt nalO y 54
    • Prioridades • Pode    serusada  a  par expressara    i porânci ou  gênci de  f ent m t a  ur a  dier es  t eads hr • Poltcas  escal íi de  onam ent de hr o  t eads  não são  padr zadas    oni em Java > D ependent da m pl ent e  i em ação  JVM da  > Em   al  ef ênci é  ger ,pr er a  dada  t eads  a hr de  m ai   i i orprordade Sun  onfdental I er   nl C i i : nt nalO y 55
    • Prioridades • C ada hr t ead  possuium a  i i   prordade que  i vara  ente  r Thread.MIN_PRIORITY 1)e  (   Thread.MAX_PRIORITY 10) ( • Pordef t    aul,cada  novo hr t ead em   prordade  t a  i i do hr t ead  pai > Thread  i palassoci prnci   ado  com   m ét o  odo main em   t a  i i prordade  Thread.NORM_PRIORITY 5) ( • Prordade  um  hr i i de  t ead  pode   dentfcada  seri ii e  m odii fcada com   m ét os  odos  getPriority e  setPriority  Sun  onfdental I er   nl C i i : nt nalO y 56
    • Gerenciamento de Threads • A  asse  ead  i di sos  ét cl Thr defne  ver m odos  a  par gerenci ent dos hr am o  t eads > M ét odos  átcos  i est i atvados  o  ópro hr pel pr i t ead – Provêem  nf m ações  i or sobr o  ópro hr e  pr i t ead – Aler   est t am o  ado  pr i t ead do  ópro hr > O utos  ét r m odos  que  podem    nvocados    r seri poroutos  t eads hr public static Thread currentThread() Retorna uma referência ao thread atualmente em execução. Sun  onfdental I er   nl C i i : nt nalO y 57
    • Gerenciamento de Threads • Pausando  Execução a  > O   ét m odo  suspende  execução  Thread.sleep  a  do  ópro hr pr i t ead      í porum perodo  t po  de em especii fcado – Tor o  ocessadordi na  pr   sponí   a  r t eads velpar outos hr – Pode    serusado  a egul   t po  execução par r aro em de  – Pr são  eci depende  dos em porzador do  st a  do  t i es  si em e  escal onador public static void sleep(long millis) public static void sleep(long millis, int nanos) Sun  onfdental I er   nl C i i : nt nalO y 58
    • Gerenciamento de Threads • Pausando  Execução a  > Tem po  pausa  de  pode   er i sert m nado    por i er upções nt r – G er a  a  exceção  InterruptedException ... try { Thread.sleep(4000); } catch (InterruptedException e) { return; } ... Sun  onfdental I er   nl C i i : nt nalO y 59
    • Gerenciamento de Threads • Pausando  Execução a  > O   ét m odo  átco  est i Thread.yield  causa  o  t ead  hr pausart por i ent  em aram e – Per ie  m t que  r t eads  outos hr possam   execut ar public static void yield() Sun  onfdental I er   nl C i i : nt nalO y 60
    • Gerenciamento de Threads • Aguardando  t m i o ér no > O   ét m odo  join  m ie   hr per t um t ead  aguar   t m i de    daro ér no  um outo hr r t ead –Invocação  causa  t ead  o hr pausarat o ér i do  r   é  t m no  outo  t ead hr > Tam bém   possí   é  velespecii     í fcarum perodo  t po  a  de em par esper   t m i do hr aro ér no  t ead – Pr são  eci depende  dos em porzador do  st a  do  t i es  si em e  escal onador > Pode   er i sert m nado   nt r pori er upções – G er a  a  exceção  InterruptedException public final void join() public final void join(long millis) public final void join(long millis, int nanos) Sun  onfdental I er   nl C i i : nt nalO y 61
    • Ciclo de Vida Alve i R unni ng sl eep() suspend() w ai( t) yi d( el ) di spat ch suspend() st t) ar( R unnabl e N on­ unnabl R e resum e() notf ) iy( st ) op( r )r ur un(  et ns Sun  onfdental I er   nl C i i : nt nalO y 62
    • Agenda – Parte 2 (Threads) 1 – Características 2 – Threads em Java 3 – Classe Threads 4 – Interface Runnable 5 – Programas e Processos 6 – Threads x Runnable 7 – Terminando Threads 8 – Prioridades 9 – Gerenciamento de Threads 10 – Ciclo de Vida 63 62
    • Exclusão Mútua 64 62
    • Agenda – Parte 3 (Exclusão Mútua) 1 – Seção Crítica 2 – Exclusão Mútua 3 – Execução Concorrente 4 – Implementando Exclusão Mútua 5 – Variáveis booleana compartilhada 65 63
    • Introdução • Processos  t eads  ou hr que  com pariham   tl dados  devem   ncr zaro  si oni   acesso  aos  dados > Evia  t que  ualzações  am   di at i sej per das   unção  em f do  acesso  concor ent r e i := i + 1 P: LD reg, i P: LD reg, i P: INC R P: INC R P: ST i,reg Q: LD reg, i LD reg, i Q: LD reg, i Q: INC R INC reg Q: INC R P: ST i, reg ST i, reg Q: ST i, reg Q: ST i, reg i = 0 i = 2 i = 1 Sun  onfdental I er   nl C i i : nt nalO y 66
    • Seção Crítica Sun  onfdental I er   nl C i i : nt nalO y 67
    • Seção Crítica • Trecho  códi que  eci ser de  go  pr sa    executado  f m a  ôm i de or at ca > A  seção  íi cont   i r crtca  ém as nstuções  que  acessam  ecur r sos  com parihados tl • Tam bém   denom i nada egi crtca r ão  íi • Par assegur   a  arque  a  um seção  íi é  crtca  executada  om i at cam ent deve­ adot   e  se  ar técni de  usão  út cas  excl m ua Sun  onfdental I er   nl C i i : nt nalO y 68
    • Exclusão Mútua • Técni que  ca  assegur que  a  apenas    um úni pr co  ocesso  t ead  ou hr pode execut   ara  seção  íi crtca > Se    ocesso  á  um pr est execut ando  sua  seção  crtca,outos  ocessos  íi   r pr não podem   r     entarem suas  ópras  pr i seções  íi crtcas > U m   ocesso  pr não  pode  r     entarem sua  seção  crtca  qual íi se  querouto  ocesso  i       r pr estverem sua  ópra  pr i seção  íi crtca Sun  onfdental I er   nl C i i : nt nalO y 69
    • Execução Concorrente Processo  A Processo  B Processo  C ... ... ... Código não crítico Código não crítico Código não crítico ... ... ... RequisitaExclusão RequisitaExclusão RequisitaExclusão ... ... ... Seção crítica Seção crítica Seção crítica ... ... ... LiberaExclusão LiberaExclusão LiberaExclusão ... ... ... Código não crítico Código não crítico Código não crítico ... ... ... Sun  onfdental I er   nl C i i : nt nalO y 70
    • Execução Concorrente • Processos  podem  execut   arconcor ent ent   r em e, excet nas  o  seções  íi crtcas Processo  A Processo  B Processo  C ... ... ... Código não crítico Código não crítico Código não crítico ... ... ... RequisitaExclusão RequisitaExclusão RequisitaExclusão ... ... ... Seção crítica Seção crítica Seção crítica ... ... ... LiberaExclusão LiberaExclusão LiberaExclusão ... ... ... Código não crítico Código não crítico Código não crítico ... ... ... Sun  onfdental I er   nl C i i : nt nalO y 71
    • Execução Concorrente • U m   co  ocesso  r na  úni pr enta  seção  íi crtca > D em ai pr s  ocessos  devem     oqueados  serbl quando  al cançam   suas  seções  íi crtcas Processo  A Processo  B Processo  C ... ... ... Código não crítico Código não crítico Código não crítico ... ... ... RequisitaExclusão RequisitaExclusão RequisitaExclusão ... ... ... Seção crítica Seção crítica Seção crítica ... ... ... LiberaExclusão LiberaExclusão LiberaExclusão ... ... ... Código não crítico Código não crítico Código não crítico ... ... ... Sun  onfdental I er   nl C i i : nt nalO y 72
    • Implementando Exclusão Mútua • C om o  antra  usão  út gar i  excl m ua? • O que devem os azerant que    f   es  um processo  r em   ente  sua  seção  íi crtca? • O que devem os azerquando    f   um processo er i sua  t m na  seção  íi crtca? Sun  onfdental I er   nl C i i : nt nalO y 73
    • Implementando Exclusão Mútua • Entada  Sessão  rtca R equi t usão) r na  C íi ( siaExcl > Verfcarse  r pr ii   outo  ocesso  á    est em sua  pr i seção  íi ópra  crtca > C aso  im atvo,bl afr i   oquearo  ocesso  é    pr at que  o  r pr outo  ocesso  a  seção  íi sai da  crtca > Senão,passarà      execução  seção  íi da  crtca • Saí da  da  Sessão  rtca Li aExcl C íi ( ber usão) > I or aros  r pr nf m   outos  ocessos  que  sessão  a  crtca oiconcl da íi f   uí Sun  onfdental I er   nl C i i : nt nalO y 74
    • Implementando Exclusão Mútua • Prm ii do i R equi t i tvas  tpo  siaExcl usão  e  Li aExcl ber usão  ant   excl gar em a  usão  út m ua • M as    ... C om o m pl ent  ai prm ii i em art s  i tvas? É  possí  m pl ent l veli em á­as? Exi em   i f m as  i pl ent l st váras or de m em á­as? São  f li pl ent de áci m em ação? Sun  onfdental I er   nl C i i : nt nalO y 75
    • Variável booleana compartilhada • Verdadeia r > Um   dos  ocessos  á  r ão  íi pr est na egi crtca • Fal sa > N enhum   dos  ocessos  á  r ão  íi pr est na egi crtca Sun  onfdental I er   nl C i i : nt nalO y 76
    • Variável booleana compartilhada Processo  P2 Begin {RequisitaExclusão} Variável Global If Ocupado then Wait; Ocupado: Boolean; Ocupado = True; End {RequisitaExclusão} ... Processo  P1 Seção crítica Begin {RequisitaExclusão} ... If Ocupado then Wait; Begin {LiberaExclusão} Ocupado = True; Ocupado = False; End {RequisitaExclusão} If P1 esperando then reative-o; ... End {LiberaExclusão} Seção crítica ... Begin {LiberaExclusão} Ocupado = False; If P2 esperando then reative-o; End {LiberaExclusão} Pseudo­códi go Sun  onfdental I er   nl C i i : nt nalO y 77
    • Variável booleana compartilhada public interface Lock { public void requestCS(); public void releaseCS(); } public class LockImpl implements Lock { boolean busy = false; public void requestCS() { while (busy); busy = true; } public void releaseCS() { busy = false; } } em   Java Sun  onfdental I er   nl C i i : nt nalO y 78
    • Variável booleana compartilhada public class MyLock extends Thread { Lock lock; em   Java public MyLock(Lock lock) { this.lock = lock; } public void run() { while (true) { lock.requestCS(); // Seção crítica lock.releaseCS(); } public static void main (String[] args) { } Lock lock = new LockImpl(); } MyLock t1 = new MyLock(lock); MyLock t2 = new MyLock(lock); t1.start(); t2.start(); } Sun  onfdental I ernalO nl C i i : nt   y 79
    • Perceberam como garantiu a exclusão mútua? Sun  onfdental I er   nl C i i : nt nalO y 80
    • Não garante a exclusão mútua public class LockImpl implements Lock { boolean busy = false; public void requestCS() { while (busy); busy = true; } public void releaseCS() { busy = false; } } Sun  onfdental I er   nl C i i : nt nalO y 81
    • Agenda – Parte 3 (Exclusão Mútua) 1 – Seção Crítica 2 – Exclusão Mútua 3 – Execução Concorrente 4 – Implementando Exclusão Mútua 5 – Variáveis booleana compartilhada 82 81
    • Sincronização 83 82
    • Agenda – Parte 4 (Sincronização) 1 – Introdução 2 – Semáforos - Tipos de Semáforo - Exclusão Mútua com Semáforo - Semáforo em Java - Problema Produtor-Consumidor - Sincronização com Semáforo 3 – Monitores - Introdução - Monitores x Semáforos - Monitores em Java - Métodos Sincronizados - Trechos de Código Sincronizado - Perigo de Deadlock - Problema Produtor-Consumidor 84 83
    • Introdução • Soluções  a  usão  út baseadas  par excl m ua  na  esper ocupada  a  são  uio  as m t car > Processo epetdam ent verfca  a  r i e  ii se  condi ção  de  entada  sessão  íi é  i eia r na  crtca  satsf t > D esper ça  di capaci dade  pr de  ocessam ent o > N ão  a esulado unci ger r t f onalútl   i • Soluções  devem  deal ent verfcara  i m e  ii   condi ção  de  r entada  apenas quando  i eia satsf t > N ão  consom e  cl de  ocessador ci os  pr   desnecessaram ent i e > R equersupore  si em a    t do onfidential: Internal O nly aci st oper onal Sun  C 85
    • Introdução • Prm ii de  ncr zação  i tvas  si oni são  ei par út s  a  resol   pr em a  excl vero  obl da  usão  út e  m ua  da  si oni ncr zação  pr de  ocessos > Eviam   esper ocupada t a  a  > Provêem     ecani o  contol da  dem   um m sm de  r e  or ente  i oper r váras  ações  dier es  ocessos de  f ent pr • Li nguagens  pr am ação  de  ogr suporam   t dier es  i ii de  ncr zação f ent prm tvas  si oni > Sem áf os or > M onior t es Sun  onfdental I er   nl C i i : nt nalO y 86
    • Semáforos • Propost porD iksta  a esol   pr em a  o    j r par r vero  obl da  excl usão  út m ua • Um   sem áf o  or possui...     > U m   ori eio  val  nt r posii que ndi quant tvo  i ca  os  processos  podem   acessaro    sem áf o or – Val  ni aldepende  pr ori ci   do  opósio  sem áf o t do  or > U m a ia  pr fl de  ocessos  oqueados  esper da  bl a  a  lber i ação  sem áf o do  or – Fia  i ci m ent vazi l é ni al e  a > D uas  operações  ôm i ­P(   V(   at cas   )e  ) – M odii o  ordo  fca  val   sem áf o  i uilber pr or e ncl /i a  ocessos  na/ fl da ia Sun  onfdental I er   nl C i i : nt nalO y 87
    • Semáforos • O perações  i ii Prm tvas > P  V  e  advêm   dos  bos  andeses est   ver hol t ar ( ober   i em ent  ver pr en)e ncr ar( hoegen) – P am bém   cham ada  ow n,W ai  Test t é  D   tou  – V am bém   cham ada  p,Si t é  U   gnalou ncr ent   I em P(s): Se s = 0 então Suspender processo na fila; s = s – 1; V(s): s = s +1; Se fila não vazia então Liberar um processo da fila; Sun  onfdental I er   nl C i i : nt nalO y 88
    • Semáforos • O perações  i ii Prm tvas P(s): Se s = 0 então Suspender processo na fila; s = s – 1; V(s): s = s +1; Se fila não vazia então Liberar um processo da fila; P(s): Se s > 0 então s = s – 1 senão Suspender processo na fila; V(s): Se fila não vazia então Liberar um processo da fila; senão s = s +1 Sun  onfdental I er   nl C i i : nt nalO y 89
    • Semáforos • Ti pos  Sem áf os de  or > Sem áf o  náro or Bi i –Val   sem áf o  i ci m ent 0  1 ordo  or é ni al e  ou  –U tlzado  a esol   pr em a  excl ii par r vero  obl da  usão  m út em   ua  sessões  íi crtcas > Sem áf o  ont or C ador –Val   sem áf o  i ci m ent qual ordo  or é ni al e  quer  i eio  nt r posii tvo –Val  epr orr esent o ot   r a  t alde ecursos  com parihados  r os  ocessos tl ente  pr –U tlzado  a  ncr zação  pr ii par si oni de  ocessos Sun  onfdental I er   nl C i i : nt nalO y 90
    • Semáforos • Excl usão  út com   M ua  Sem áf o or > Sessão  íi delm iada    crtca  i t porsem áf o  náro or bi i Variável Global s: Semáforo Binário; Begin {RequisitaExclusão} P(s): Se s = 0 então P(s); Suspender processo na fila; End {RequisitaExclusão} ... s = s - 1 Seção crítica ... Begin {LiberaExclusão} V(s); End {LiberaExclusão} Sun  onfdental I er   nl C i i : nt nalO y 91
    • Semáforos • Excl usão  út com   M ua  Sem áf o or > G ar e  excl ant a  usão  út m ua > Processos  são ndependent i es – N ão  t nam   execução  aler a  das  seções  íi crtcas > Processos  não  bl se  oquei   ut am m uam ent e – N ão  r     entam em deadl ock > Processos  não  esper  ndefni am i i dam ent   e, dependendo  poltca  lber da  íi de i ação  fl da ia – N ão  acont ece  ar i st vaton > Evia  esper ocupada t a  a  Sun  onfdental I er   nl C i i : nt nalO y 92
    • Semáforos • Sem áf o    or em Java  I pl ent m em ado  a  asse  pel cl Semaphore public Semaphore(int permits) public Semaphore(int permits, boolean fair) C ra  i ci i um   i e ni alza  sem áf o or permits –  ori ci   sem áf o val  ni aldo  or fair ­gar e  íi de i ação  FO (true)   ant poltca  lber FI public void acquire() throws InterruptedException I pl ent a  m em a  operação  i ii P prm tva  public void release() I pl ent a  m em a  operação  i ii V prm tva  Sun  onfdental I er   nl C i i : nt nalO y 93
    • Semáforos • Sem áf o    or em Java > I pl ent m em ando  Excl usão  út M ua public class MyLock extends Thread { Semaphore s; int id; public MyLock(Semaphore s, int id) { this.s = s; this.id = id; } public static void main (String[] args) { int nproc = 10; public void run() { while (true) { Semaphore s = new Semaphore(1, true); try { for (int p = 0; p < nproc; p++) s.acquire(); // Sessão crítica (new MyLock(s, p)).start(); s.release(); } } catch (InterruptedException e) {} } } } Sun  onfdental I er   nl C i i : nt nalO y 94
    • Semáforos • Si oni ncr zação  com   Sem áf o or > Pr em a  odut ­ onsum i obl Pr or C dor – Produt   oduz  orpr dados  os  oca      f e  col em um bufer – C onsum i  em ove  dados  buferpar usá­ dorr os  do  f   a  l os Produt or Bufer f C onsum i dor Produtor C onsum i dor col oca r ove em dados no dados  do bufer f bufer f Sun  onfdental I er   nl C i i : nt nalO y 95
    • Semáforos • Si oni ncr zação  com   Sem áf o or > Pr em a  odut ­ onsum i obl Pr or C dor – BuferSi pl /M ensagem   ni f   m es   Ú ca Variável Global s: Semáforo Binário; {inicialmente 0} ... ... Armazena dados no buffer P(s); V(s); Remove dados do buffer ... ... Produt or C onsum i dor Sun  onfdental I er   nl C i i : nt nalO y 96
    • Semáforos • Si oni ncr zação  com   Sem áf o or > Pr em a  obl public class SingleBuffer { Semaphore s; Produt ­ onsum i or C dor String value; public SingleBuffer() { – BuferSi pl / f   m es   s = new Semaphore(0); value = null; M ensagem   ni Ú ca } public void deposit(String v) { value = v; s.release(); } public String fetch() { s.acquire(); return value; } } Sun  onfdental I er   nl C i i : nt nalO y 97
    • Semáforos • Si oni ncr zação  com   Sem áf o or > Pr em a  odut ­ onsum i obl Pr or C dor – BuferSi pl /M ensagem   ni f   m es   Ú ca public class Producer extends Thread { SingleBuffer buffer; String value; public Producer(SingleBuffer b, String v) { buffer = b; public class Consumer extends Thread { value = v; SingleBuffer buffer; } String value; public void run() { public Consumer(SingleBuffer b) { buffer.deposit(value); buffer = b; } } } public void run() { value = buffer.fetch(); } Sun  onfdental I er   nl C i i : nt nalO y 98 }
    • Semáforos • Si oni ncr zação  com   Sem áf o or > Pr em a  odut ­ onsum i obl Pr or C dor – BuferSi pl /M ensagem   ni f   m es   Ú ca public class ProducerConsumer { public static void main (String[] args) { String message = “Campus IV”; SingleBuffer b = new SingleBuffer(); Producer p = new Producer(b, message); Consumer c = new Consumer(b); p.start(); c.start(); } } Sun  onfdental I er   nl C i i : nt nalO y 99
    • Semáforos • Si oni ncr zação  com   Sem áf o or > Sem áf os  ant   excl or gar em a  usão  út e  m iem   m ua  per t a  si oni ncr zação  pr de  ocessos – G ar i depende  cor et uso  anta  do  r o  das  i ii prm tvas – Prm ii podem     i tvas  seresqueci das  o  ogr adordur e  pel pr am   ant a  codii fcação – G ar i depende  cor et ent anta  do  r o  endi ent do  m o  r aci el onam ent ente  váras  i ii o  r as  i prm tvas – C ódi gos  das sessões  íi são eplcados  di crtcas  r i ou  spersos  nos  dier es  ocessos f ent pr – Prm ii são  sper i tvas  di sas  códi dos  ocessos no  go  pr – É  eci avalart pr so  i  odo  códi par ent o  go  a  endero el onam ent   r aci o  ente  prm ii r as  i tvas Sun  onfdental I er   nl C i i : nt nalO y 100
    • Monitores • M onior t es > C onstução  r que  pode    serusada  a  usão  út par excl m ua  e  ncr zação  pr si oni de  ocessos > Propost porD iksta  post i m ent i pl ent o    j r e  eror e m em ado  porH oar e  ansen   e  H > Explcia  centalza  sessões  íi i t e  r i as  crtcas    a  em um pare  t especi   códi aldo  go – Excl usão  út é  om atcam ent f çada m ua  aut i e or – Faciia  ent lt o  endi ent m o > N ão  adot prm ii par dem ar  egi a  i tvas  a  carr ões  íi crtcas – Evia  esqueci ent do  t o  m o  uso  das  i ii prm tvas Sun  onfdental I er   nl C i i : nt nalO y 101
    • Monitores • U m   oniorpossui... m t       > N om e  que em   pr t o  opósio  i t de dentfcação ii > Varávei gl i s  obai que  s  são  com parihadas  r os  tl ente  processos  que  usam   m onior do  t > Procedi ent de  r m os  entada pr ( ocedur enti   e  res)que  podem     i seratvados  os  ocessos pel pr – Podem   possui  i rvarávei l s  par etos s ocai e  âm r – U m   co  ocesso  úni pr poderatvaros  ocedi ent do    i   pr m os  m onior   cada nst e t ,a  i ant – I põe  excl m a  usão  út ente  ocessos m ua  r pr – Varávei gl i s  obai som ent podem     s  e  seracessadas  pari  a  trdos  procedi ent m os > C ódi de ni alzação : Internal O nly i go  i ci iSun C onfidential varávei gl das  s  obai s 102
    • Monitores monitor: nomemonitor; declaração de variáveis globais; procedure operação1(parâmetros); declaração de variáveis locais; begin código que implementa a operação end; ... procedure operaçãoN(parâmetros); declaração de variáveis locais; begin código que implementa a operação end; begin código de inicialização das variáveis globais end Sun  onfdental I er   nl C i i : nt nalO y 103
    • Monitores • M onior x  t es  Sem áf os or S Processo  1 Processo  2 Processo  N e Begin Begin Begin m ... ... ... á P(s) P(s) P(s) f Sessão crítica 1 Sessão crítica 2 Sessão crítica N o V(s) V(s) V(s) r ... ... ... o End; End; End; M o Begin Begin Begin n ... ... ... i oper1(params); oper2(params); operN(params); t ... ... ... o End; End; End; r Sun  onfdental I er   nl C i i : nt nalO y 104
    • Monitores • Podem    m pl ent seri em ados  com o  a  um cl asse   i em lnguagens  i adas  obj os orent a  et – N om e  cl da  asse  i ânci do  et r esent ou nst a  obj o epr a  o nom e  m onior do  t – Ati os epr rbut r esent   varávei gl am as  i s  obai s  com parihadas tl – M ét odos epr r esent   pr am os  ocedi ent de  r m os  entada – C onstut  epr r orr esent o  a  códi de ni alzação  go  i ci i das  varávei com parihadas i s  tl Sun  onfdental I er   nl C i i : nt nalO y 105
    • Monitores • M onior em   t es  Java > Todo  et Java  obj o  possuium   oniorassoci   m t   ado > Prm ii synchronized per ie  i tva  m t acessaro  onior   m t   de    et um obj o – Prm ii pode    i tva  serusada    ét em m odos  techos  códi ou r de  go  ( at ent st em s) – Assegur que,em     a    um dado nst e,apenas    co hr i ant   um úni t ead  pode  execut   ét arm odos  obj o do  et – Thread  possuio  oquei (ock)do  oniordo  et   bl o l   m t   obj o – Thread  á  est dento  m oniordo  et r do  t   obj o Sun  onfdental I er   nl C i i : nt nalO y 106
    • Monitores • M onior em   t es  Java > Prm ii synchronized i tva  – M ét odos  ncr zados Si oni – M ét odos  átcos am bém   est i t podem     ncr zados sersi oni – I ânci e  asse  nst as  cl possuem   onior (ocks) m t es l   i ndependentes – C ada  onior( et /cl m t  obj o   asse)       ,em um dado nst e, i ant   per ie  execução  um   co hr m t a  de  úni t ead    – Trechos  C ódi Si oni de  go  ncr zados – Pode ncr ent   concor ênci de hr i em ara  r a  t eads – Per ie  m t execução  m ulânea  di sos  ét si t de  ver m odos Sun  onfdental I er   nl C i i : nt nalO y 107
    • Monitores • M onior em   t es  Java D ados O b M étodo Fia  pr l de  ocessos do si oni ncr zado m oniorda  asse t   cl j M étodo Fia  pr l de  ocessos  do e si oni ncr zado m oniordo  et t   obj o t M étodo  não o si oni ncr zado C onj o  pr unt de  ocessos M étodo  não sem   oquei dos  onior bl o  m t es si oni ncr zado Sun  onfdental I er   nl C i i : nt nalO y 108
    • Monitores • M onior em   t es  Java public class SynchClassName { private String globalVar; public SynchClassName() { } public synchronized void synchMethod() { String localVar; } public void nonSynchMethod() { } public static synchronized void synchStaticMethod() { } public static void nonSynchStaticMethod() { } } Sun  onfdental I er   nl C i i : nt nalO y 109
    • Monitores public class SynchClass { public synchronized void synchMethod(int i) { while (true) System.out.println(i); } public void nonSynchMethod(int i) { while (true) System.out.println(i); } public static synchronized void synchStaticMethod(int i) { while (true) System.out.println(i); } public static void nonSynchStaticMethod(int i) { while (true) System.out.println(i); } } Sun  onfdental I er   nl C i i : nt nalO y 110
    • Monitores public class SynchImpl extends Thread { int id; SynchClass sc; public SynchImpl(int id, SynchClass sc) { ... this.id = id; public void run() { this.sc = sc; switch (id) { } case 0: case 1: sc.synchMethod(id); break; case 2: case 3: sc.nonSynchMethod(id); break; case 4: case 5: SynchClass.synchStaticMethod(id); break; case 6: case 7: SynchClass.nonSynchStaticMethod(id); break; } public static void main (String[] args) { } SynchClass sc = new SynchClass(); ... for (int i=0; i < 8; i++) } (new SynchImpl(i, sc)).start(); } Sun  onfdental I ernalO nl C i i : nt   y 111
    • Monitores • M onior em   t es  Java > Trechos  códi si oni de  go  ncr zados public class SynchClassName { private String globalVar; private Object lock1 = new Object(); private Object lock2 = new Object(); public void nonsyncMethod() { public void nonsyncMethod1() { String localVar; synchronized (lock1) { ... ... synchronized (this) { } ... } } public void nonsyncMethod2() { ... synchronized (lock2) { } ... } } Sun  onfdental I er   nl C i i : nt nalO y 112
    • public class SynchClass { Monitores private Object lock1 = new Object(); private Object lock2 = new Object(); public void synchThisMethod(int i) { synchronized (this) { while (true) System.out.println(i); } } public void synchLock1Method(int i) { synchronized (lock1) { while (true) System.out.println(i); } } public void synchLock2Method(int i) { synchronized (lock2) { while (true) System.out.println(i); } } } Sun  onfdental I er   nl C i i : nt nalO y 113
    • Monitores public class SynchImpl extends Thread { int id; SynchClass sc; public SynchImpl(int id, SynchClass sc) { this.id = id; public static void main (String[] args) { this.sc = sc; SynchClass sc = new SynchClass(); } for (int i=0; i < 6; i++) public void run() { (new SynchImpl(i, sc)).start(); switch (id) { } case 0: case 1: sc.synchThisMethod(id); break; case 2: case 3: sc.synchLock1Method(id); break; case 4: case 5: sc.synchLock2Method(id); break; } } ... } Sun  onfdental I er   nl C i i : nt nalO y 114
    • Monitores • Per go  D eadl i de  ocks > D eve­ t arcui se om   dado  a  t   par eviardeadl ock public class BadSynchClass { private int value; public synchronized int get() { return value; } public synchronized void set(int i) { value = i; } public synchronized void swap(BadSynchClass bsc) { int tmp = get(); set(bsc.get()); public BadSynchClass(int v) { bsc.set(tmp); value = v; } } } Sun  onfdental I er   nl C i i : nt nalO y 115
    • Monitores public class BadSynchImpl extends Thread { BadSynchClass a, b; public BadSynchImpl(BadSynchClass a, BadSynchClass b) { this.a = a; this.b = b; } public void run() { a.swap(b); System.out.println(“A: “ + a.get() + “ B: “ + b.get()); } public static void main (String[] args) { BadSynchClass a = new BadSynchClass(1); BadSynchClass b = new BadSynchClass(2); (new BadSynchImpl(a, b)).start(); (new BadSynchImpl(b, a)).start(); } } Sun  onfdental I er   nl C i i : nt nalO y 116
    • Fonte • Si oni ncr zação  com   onior M t > Pr em a  odut ­ onsum i obl Pr or C dor – Produt   oduz  orpr dados  os  oca      f e  col em um bufer – C onsum i  em ove  dados  buferpar usá­ dorr os  do  f   a  l os Produt or Bufer f C onsum i dor Produtor C onsum i dor col oca r ove em dados no dados  do bufer f bufer f Sun  onfdental I er   nl C i i : nt nalO y 117
    • Monitores • Pr em a  odut ­ onsum i obl Pr or C dor – BuferSi pl /M ensagem   ni public SingleBuffer() { f   m es   Ú ca value = null; public class SingleBuffer { empty = true; String value; } boolean empty; ... public synchronized void deposit(String v) { value = v; empty = false; notify(); } public synchronized String fetch() { while (empty) wait(); return value; } } Sun  onfdental I er   nl C i i : nt nalO y 118
    • Monitores public class Producer extends Thread { SingleBuffer buffer; String value; public Producer(SingleBuffer b, String v) { buffer = b; value = v; public class Consumer extends Thread { } SingleBuffer buffer; String value; public void run() { buffer.deposit(value); public Consumer(SingleBuffer b) { } buffer = b; } } public void run() { value = buffer.fetch(); } } Sun  onfdental I er   nl C i i : nt nalO y 119
    • Monitores public class ProducerConsumer { public static void main (String[] args) { String message = args[0]; SingleBuffer b = new SingleBuffer(); Producer p = new Producer(b, message); Consumer c = new Consumer(b); p.start(); c.start(); } } Sun  onfdental I er   nl C i i : nt nalO y 120
    • Agenda – Parte 4 (Sincronização) 1 – Introdução 2 – Semáforos - Tipos de Semáforo - Exclusão Mútua com Semáforo - Semáforo em Java - Problema Produtor-Consumidor - Sincronização com Semáforo 3 – Monitores - Introdução - Monitores x Semáforos - Monitores em Java - Métodos Sincronizados - Trechos de Código Sincronizado - Perigo de Deadlock - Problema Produtor-Consumidor 121
    • Mãos à obra Sun  onfdental I er   nl C i i : nt nalO y 122
    • Fonte • Sldes  pr essorG l i do  of   êdson  i Elas  r er e  di plna  LP2  ef ent à  sci i de  da  U ni si ver dade  Feder   Par ba,2008 alda  aí   Sun  onfdental I er   nl C i i : nt nalO y 123
    • Perguntas? Sun  onfdental I er   nl C i i : nt nalO y 124
    • Fonte • Sldes  pr essorG l i do  of   êdson  i Elas  r er e  di plna  LP2  ef ent à  sci i de  da  U ni si ver dade  Feder   Par ba,2008 alda  aí   Sun  onfdental I er   nl C i i : nt nalO y 125
    • Programação Concorrente com Java Elenilson Vieira Embaixador de Campus da Sun Universidade Federal da Paraíba blogs.sun.com/elenilsonvieira elenilson.vieira@sun.com 126