SlideShare une entreprise Scribd logo
1  sur  126
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Programação Concorrente com Java

Datasheet uniforme
Datasheet uniformeDatasheet uniforme
Datasheet uniformeThiago Neves
 
Tópicos - Computacao Paralela Intalação MPI
Tópicos - Computacao Paralela Intalação MPITópicos - Computacao Paralela Intalação MPI
Tópicos - Computacao Paralela Intalação MPILuiz Arthur
 
F3M Information Systems
F3M Information SystemsF3M Information Systems
F3M Information Systemsjralmeida
 
Oficina 1: CBC de Ciências e Matemática
Oficina 1: CBC de Ciências e MatemáticaOficina 1: CBC de Ciências e Matemática
Oficina 1: CBC de Ciências e MatemáticaLaís Rios
 
Cap.8 introdução ás derivadas
Cap.8 introdução ás derivadasCap.8 introdução ás derivadas
Cap.8 introdução ás derivadasVicente Soella Neto
 
Site CoCriativo - TeaserPropaganda
Site CoCriativo - TeaserPropagandaSite CoCriativo - TeaserPropaganda
Site CoCriativo - TeaserPropagandaDanilo Nunes
 
Qualidade - pensando fora da caixa
Qualidade - pensando fora da caixaQualidade - pensando fora da caixa
Qualidade - pensando fora da caixaJorge Diz
 

Similaire à Programação Concorrente com Java (15)

Datasheet uniforme
Datasheet uniformeDatasheet uniforme
Datasheet uniforme
 
Datasheet
DatasheetDatasheet
Datasheet
 
Profissionais
ProfissionaisProfissionais
Profissionais
 
Proc%205
Proc%205Proc%205
Proc%205
 
Tópicos - Computacao Paralela Intalação MPI
Tópicos - Computacao Paralela Intalação MPITópicos - Computacao Paralela Intalação MPI
Tópicos - Computacao Paralela Intalação MPI
 
Livro sobre a cultura do inhame
Livro sobre a cultura do inhameLivro sobre a cultura do inhame
Livro sobre a cultura do inhame
 
F3M Information Systems
F3M Information SystemsF3M Information Systems
F3M Information Systems
 
Ntp 2-cp2011
Ntp 2-cp2011Ntp 2-cp2011
Ntp 2-cp2011
 
Oficina 1: CBC de Ciências e Matemática
Oficina 1: CBC de Ciências e MatemáticaOficina 1: CBC de Ciências e Matemática
Oficina 1: CBC de Ciências e Matemática
 
Questinário 1 e 2
Questinário 1 e 2Questinário 1 e 2
Questinário 1 e 2
 
Cap.8 introdução ás derivadas
Cap.8 introdução ás derivadasCap.8 introdução ás derivadas
Cap.8 introdução ás derivadas
 
Web Semântica 1+1=3
Web Semântica 1+1=3Web Semântica 1+1=3
Web Semântica 1+1=3
 
Site CoCriativo - TeaserPropaganda
Site CoCriativo - TeaserPropagandaSite CoCriativo - TeaserPropaganda
Site CoCriativo - TeaserPropaganda
 
Aula 3
Aula 3 Aula 3
Aula 3
 
Qualidade - pensando fora da caixa
Qualidade - pensando fora da caixaQualidade - pensando fora da caixa
Qualidade - pensando fora da caixa
 

Plus de Elenilson Vieira (20)

Aulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz LavieriAulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz Lavieri
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
JavaEE
JavaEEJavaEE
JavaEE
 
JavaME no Mercado Mobile
JavaME no Mercado MobileJavaME no Mercado Mobile
JavaME no Mercado Mobile
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Apresentação da Doom
Apresentação da DoomApresentação da Doom
Apresentação da Doom
 
Palestra sobre a Sun
Palestra sobre a SunPalestra sobre a Sun
Palestra sobre a Sun
 
Apresentação da RedeSoft
Apresentação da RedeSoftApresentação da RedeSoft
Apresentação da RedeSoft
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
A Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPBA Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPB
 
Mini-Curso de Sockets no Unipê
Mini-Curso de Sockets no UnipêMini-Curso de Sockets no Unipê
Mini-Curso de Sockets no Unipê
 
JavaME
JavaMEJavaME
JavaME
 
Programas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no UnipêProgramas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no Unipê
 
Mundo Livre e Aberto
Mundo Livre e AbertoMundo Livre e Aberto
Mundo Livre e Aberto
 
JavaME - Aula 2
JavaME - Aula 2JavaME - Aula 2
JavaME - Aula 2
 
JavaME - Aula 1
JavaME - Aula 1JavaME - Aula 1
JavaME - Aula 1
 
Apostila JavaME
Apostila JavaMEApostila JavaME
Apostila JavaME
 
Threads
ThreadsThreads
Threads
 
Sincronização - Glêdson Elias
Sincronização - Glêdson EliasSincronização - Glêdson Elias
Sincronização - Glêdson Elias
 
Collections e Generics
Collections e GenericsCollections e Generics
Collections e Generics
 

Programação Concorrente com Java

  • 1. 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
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. Perguntas? Sun  onfdental I er   nl C i i : nt nalO y 6
  • 7. Começando a brincadeira... Footnote position, 12 pts. Sun  onfdental I er   nl C i i : nt nalO y 7
  • 9. 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
  • 10. • 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
  • 11. • 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
  • 12. 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
  • 13. Footnote position, 12 pts. Sun  onfdental I er   nl C i i : nt nalO y 13
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 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 é  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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. Threads 40 38
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. 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
  • 59. 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
  • 60. 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
  • 61. 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
  • 62. 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
  • 63. 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
  • 65. 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
  • 66. 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
  • 67. Seção Crítica Sun  onfdental I er   nl C i i : nt nalO y 67
  • 68. 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
  • 69. 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
  • 70. 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
  • 71. 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
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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
  • 77. 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
  • 78. 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
  • 79. 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
  • 80. Perceberam como garantiu a exclusão mútua? Sun  onfdental I er   nl C i i : nt nalO y 80
  • 81. 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
  • 82. 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
  • 84. 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
  • 85. 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
  • 86. 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
  • 87. 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
  • 88. 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
  • 89. 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
  • 90. 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
  • 91. 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
  • 92. 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
  • 93. 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
  • 94. 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
  • 95. 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
  • 96. 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
  • 97. 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
  • 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 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 }
  • 99. 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
  • 100. 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
  • 101. 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
  • 102. 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
  • 103. 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
  • 104. 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
  • 105. 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
  • 106. 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
  • 107. 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
  • 108. 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
  • 109. 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
  • 110. 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
  • 111. 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
  • 112. 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
  • 113. 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
  • 114. 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
  • 115. 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
  • 116. 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
  • 117. 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
  • 118. 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
  • 119. 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
  • 120. 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
  • 121. 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
  • 122. Mãos à obra Sun  onfdental I er   nl C i i : nt nalO y 122
  • 123. 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
  • 124. Perguntas? Sun  onfdental I er   nl C i i : nt nalO y 124
  • 125. 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
  • 126. 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