Giter VIP home page Giter VIP logo

curso-java-intermediario-loiane's Issues

Deadlock

O Deadlock pode acontecer com processos do sistema operacional e também com threads.

deadlock

Neste exemplo eu tenho 2 threads, a primeira quer usar o objeto 1 então ela vai bloquear o objeto 1 usando o syncronized mas como existe o objeto 2 e thread 2 bloqueia o objeto 2 acontece um impasse porque a Thread 1 quer usar o 2 objeto e a 2 quer usar o 1 objeto. E como as duas estão segurando os objetos, tem o deadlock.

deadlock-imagem

Ao bloquear um recurso que um processo ou outra thread quer usar é chamado de deadlock

Enumeradores (Enum)

  • Enums extends a classe java.lang.Enum
  • Podem ser comparadas usando ==
  • Não podem ser instanciadas com new
  • Podem implementar interfaces
  • Pode ser declarado separadamente ou dentro de classe

Classes Utilitárias

São:

  • Date
  • Calendar
  • GregorianCalendar
  • Formatando Datas
  • Locale
  • TimeZone
  • Instalar jars no projeto
  • Biblioteca Joda-Time
  • Resource bundle
  • Currency (moeda)
  • Formatando números
  • BigDecimal e BigNumber
  • Random

funcoes-trigonometricas

funcoes-arredondamento

funcoes-arredondamento-2

outros

Programação multi-tarefas: Threads

MULTITHREADS

  • Multitarefas: processos e threads
  • Processo é um programa que está sendo executado
  • Thread é a menor unidade de código que pode ser executada
  • Ou seja, permite ao programa executar 2 ou mais tarefas ao mesmo tempo

Exemplo:

  • Um editor de texto pode formatar um texto (ao clicar em um botão) e ao mesmo tempo pode enviar o texto para impressão

gerenciador-de-tarefas

No gerenciador de tarefas por exemplo, é possível notar que o eclipse está executando 32 serviços, ou seja tem 32 threads.


VANTAGENS

O programas são mais eficientes

ciclo-de-vida-threads

Ao criar uma nova thread é uma nova instancia, podendo deixar ela pronta para execução (estado: runnable - método: start()) quando está pronta para execução ela será executada (estado: running - método: run()) e após a sua execução ou ela termina (estado: dead) ou ela fica parada (estado: waiting - método: sleep(), wait() ou supend()) e para iniciar sua execução (estado: runnable - método notify(), notifyAll() ou resume())


QUAL ABORDAGEM É A MELHOR ?

  • Quando fazemos extends da Thread, o único método que precisa ser sobreposto é o run
  • Quando implementamos Runnable, também precisamos implementar o método run
  • Com a classe Runnable, podemos extender qualquer outra classe
  • Se não for sobrepor qualquer outro método da classe Thread, pode ser melhor usar a classe Runnable

SYNCHRONIZED

  • Sincronização é o ato de coordenar as atividades de 2 ou mais threads
  • Motivo: quando 2 ou mais threads precisam acessar um recurso compartilhado, ou somente 1 thread pode acessar o recurso por vez
  • No java usamos a palavra chave synchronized em métodos (assinatura) ou em um bloco de código

  • Uma thread A está sendo executada dentro de um método sincronizado e precisa de acesso a um recurso R que no momento está indisponível
  • Se a thread A ficar esperando por R, irá bloquear o objeto impedindo que outras threads acessem o mesmo
  • Nesse caso a melhor solução para não causar problemas é liberar temporariamente o controle do objeto permitindo que outra thread seja executada
  • wait: bloqueia a execução da thread temporariamente, ou seja, coloca a thread em modo de espera
  • a thread fica em modo de espera até que seja notificada
  • notify: notifica uma thread que estava esperando, ou seja, retorna a execução da thread
  • notifyAll: notifica todas as threads, e a que tem prioridade mais alta ganha acesso ao objeto

  • Pode ser útil suspender uma thread. Por exemplo, uma thread que mostra a hora do dia. Podemos suspender e posteriormente resumir a execução.
  • Até o Java 2 existiam os métodos suspend, resume e stop
  • O método suspend foi substituído no Java 2 por poder causar problema de deadlock
  • E como o resume não funciona sem o suspend, também foi removido
  • O método stop também foi substituído no Java 2 (deve-se usar o método interrupt no lugar)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.