Você está aqui: Java ::: Dicas & Truques ::: Threads |
Threads em Java - Como definir as prioridades das threads JavaQuantidade de visualizações: 12299 vezes |
Quando estamos trabalhando com threads em Java, precisamos estar cientes de que cada thread possui uma prioridade de execução. É por meio da prioridade de cada uma que o gerenciador de threads decidirá qual thread deverá ser executada primeiro. Por padrão, todas as threads possuem prioridade NORM_PRIORITY. Esta é uma constante que possui o valor 5 e está declarada na classe Thread. Além disso, cada thread herda automaticamente a prioridade da thread que a criou. As constantes MAX_PRIORITY (prioridade máxima), MIN_PRIORITY (prioridade mínima) e NORM_PRIORITY (prioridade normal) são usadas para definir as prioridades das threads Java. Veja um exemplo no qual temos duas threads. A primeira possui a prioridade máxima enquanto a segunda possui a prioridade mínima: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // criamos uma classe que servirá como thread class MinhaThread extends Thread{ private String nome; public MinhaThread(String nome){ this.nome = nome; } public void run(){ for(int i = 1; i <= 20; i++){ System.out.println(nome + ": " + i); } } } public class Estudos{ public static void main(String[] args){ // vamos criar duas threads MinhaThread t1 = new MinhaThread("Thread 1"); t1.setPriority(Thread.MAX_PRIORITY); // prioridade máxima t1.start(); MinhaThread t2 = new MinhaThread("Thread 2"); t2.setPriority(Thread.MIN_PRIORITY); // prioridade mínima t2.start(); } } Execute este exemplo e veja como a segunda thread só é executada quando a primeira finaliza. Remova as linhas que definem a prioridade e note como o tempo de cada thread é novamente fracionado. É importante ter em mente que aqui estamos falando de um ambiente de processador único. Em ambientes de múltiplos processadores o comportamento pode ser diferente do abordado na dica. Não devemos confiar em prioridades de threads quando o objetivo é aguardar a finalização de uma thread e só então permitir o processamento das instruções contidas no método run() de outra thread. Para estes casos o recomendável é usar alguma forma para sinalizar as demais threads de que a thread atual concluiu sua tarefa. |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Dicas & Truques ::: Threads |
Threads em Java - Como usar a interface Runnable da Java API em suas aplicaçõesQuantidade de visualizações: 17730 vezes |
A interface pública Runnable deve ser implementada em nossas classes quando queremos que instâncias destas possam ser executadas por uma thread. Esta interface está no pacote java.lang e entre as classes que a implementam podemos citar AsyncBoxView.ChildState, FutureTask, RenderableImageProducer, Thread e TimerTask. Esta interface apresenta apenas um método, a saber: public void run(); Este interface foi idealizada para fornecer um protocolo comum para objetos que têm como objetivo executar determinadas porções de código enquanto ativos. Por exemplo, Runnable é implementada pela classe Thread. Estar ativa significa que uma thread foi iniciada e ainda não finalizou sua tarefa. Além disso, a interface Runnable fornece meios para que uma classe esteja ativa sem fazer sub-classe de Thread. Uma classe que implementa Runnable pode ser executada sem fazer sub-classe de Thread criando-se uma instância de Thread e fornecendo tal classe como alvo. Na maioria dos casos, a interface Runnable deve ser usada se estivermos planejando apenas sobrescrever o método run() e nenhum outro método da classe Thread. Isso é importante, uma vez que não devemos extender classes a menos que tenhamos a intenção de modificar ou extender o comportamento fundamental da classe. Veja uma aplicação na qual temos uma classe que implementa Runnable. Note como criamos instâncias de Thread e fornecemos nossa classe como alvo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // criamos uma classe que servirá como thread class MinhaThread implements Runnable{ private String nome; public MinhaThread(String nome){ this.nome = nome; } public void run(){ for(int i = 1; i <= 20; i++){ System.out.println(nome + ": " + i); } } } public class Estudos{ public static void main(String[] args){ // vamos criar duas threads MinhaThread mt1 = new MinhaThread("Thread 1"); Thread t1 = new Thread(mt1); t1.start(); MinhaThread mt2 = new MinhaThread("Thread 2"); Thread t2 = new Thread(mt2); t2.start(); System.exit(0); } } |
Java ::: Pacote java.awt.image ::: BufferedImage |
Como desenhar um BufferedImage em um JComponent do JavaQuantidade de visualizações: 10834 vezes |
Neste exemplo nós usamos o método drawImage() da classe Graphics para desenhar o conteúdo de um BufferedImage (que contém uma imagem JPG) em uma JFrame do Java Swing:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- import java.awt.*; import java.io.*; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; import javax.imageio.*; public class Estudos extends JFrame{ private BufferedImage imagem; public Estudos(){ super("Estudos Java"); Container c = getContentPane(); c.setLayout(new FlowLayout()); JButton btn = new JButton("Carregar Imagem"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ imagem = null; try{ imagem = ImageIO.read( new File("imagens/fundo.jpg")); } catch(IOException exc){ JOptionPane.showMessageDialog(null, "Erro ao carregar a imagem: " + exc.getMessage()); } if(imagem != null){ desenhar(); } } } ); c.add(btn); setSize(400, 300); setVisible(true); } public void desenhar(){ // desenha a imagem no JFrame Graphics g = getGraphics(); g.drawImage(imagem, 0, 0, this); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Java ::: Reflection (introspecção) e RTI (Runtime Type Information) ::: Passos Iniciais |
Saiba o que é Reflexão (Reflection) em Java - Como usar Reflexão (Reflection) na linguagem Java - RevisadoQuantidade de visualizações: 18226 vezes |
Reflection (ou Reflexão), também conhecida como RTI (Runtime Type Information) em algumas linguagens, é um mecanismo para descobrir dados a respeito de um programa em tempo de execução. Reflection em Java nos permite descobrir informações sobre atributos ou membros (campos), métodos e construtores de classes. Podemos também operar nos campos e métodos que descobrimos. A Reflection permite o que é normalmente chamada de programação dinâmica em Java. A Reflection em Java é conseguida usando a Java Reflection API. Esta API consiste de classes nos pacotes java.lang e java.lang.reflect. Antes de prosseguirmos, veja um exemplo de como podemos listar todos os métodos públicos da classe Object: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.lang.reflect.*; public class Estudos{ public static void main(String args[]){ // vamos carregar a classe Object try{ Class c = Class.forName("java.lang.Object"); // obtém os nomes dos métodos Method[] metodos = c.getMethods(); // exibe o nome de cada método for(int i = 0; i < metodos.length; i++){ System.out.println(metodos[i].getName()); } } catch(ClassNotFoundException e){ System.out.println(e.getMessage()); } System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: wait wait wait equals toString hashCode getClass notify notifyAll Eis uma lista das coisas que podemos fazer com a Java Reflection API: 1) Determinar a classe de um objeto; 2) Obter informações sobre os modificadores, campos (atributos), métodos, construtores e superclasses de uma classe; 3) Descobrir quais constantes e declarações de métodos pertencem a uma interface; 4) Criar uma instância de uma classe cujo nome não sabemos até o tempo de execução; 5) Obter e definir o valor do campo de um objeto; 6) Invocar um método em um objeto; 7) Criar um novo array, cujo tamanho e tipo de dados só saberemos em tempo de execução. A Java Reflection API é geralmente usada para criar ferramentas de desenvolvimento tais como debuggers, class browsers e construtores de GUI. Geralmente, neste tipo de ferramentas, precisamos interagir como classes, objetos, métodos e campos, e não sabemos quais em tempo de compilação. Assim, a aplicação deve, dinamicamente, encontrar e acessar estes itens. Esta dica foi revisada e testada no Java 8. |
Vamos testar seus conhecimentos em JavaScript |
JavaScript é o mesmo que Java? A) Sim B) Não Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fundações |
Fundações rasas Uma fundação do tipo radier é, convencionalmente, uma laje de concreto usada quando, EXCETO: A) O solo é mole, com baixa capacidade de carga. B) É necessário combater a sobrepressão hidrostática. C) Há ocorrência de bolsões de solos moles variáveis sob a projeção da estrutura. D) A sapata corrida cobre 40% acima da área de fundação por causa de cargas elevadas de pilares. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
O exercício do direito à propriedade O tema dos direitos de vizinhança tem uma série de regras no Código Civil, que delimita o que um vizinho pode realizar em relação aos limites do exercício regular de seus direitos, que terminam onde iniciam os direitos do outro. Quanto ao tema dos direitos de vizinhança, seus desdobramentos conceituais e regras existentes no Código Civil, analise as assertivas marcando a opção correta: A) Os direitos de vizinhança são obrigações ambulatórias, propter rem, pois acompanham a coisa, assim como o IPTU e as dívidas de condomínio. B) Pela teoria da anterioridade ou pré-ocupação, o vizinho que se estabeleceu depois não pode reclamar do barulho do que já estava ali antes. C) A função social da propriedade é um dos nortes da matéria dos direitos de vizinhança e é construção jurisprudencial, não estando prevista legislativamente. D) O dono das árvores que estiverem situadas em seu terreno tem direito sobre elas, seus frutos e sua poda, sendo seus os frutos que caem no terreno do vizinho, e seu direito às raízes das árvores que crescem em terreno do vizinho, pois são direitos que decorrem da sua propriedade. E) O dono ou possuidor do prédio inferior está obrigado a tolerar fluxo de águas artificialmente levadas (a exemplo de aquedutos ou captação de águas pluviais). Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Introdução à Ética Santo Agostinho foi um dos mais influentes pensadores cristãos da antiguidade, e abordava em suas obras questões éticas baseadas na compreensão da natureza da ética e sua ligação com a religião. Os textos de Santo Agostinho buscavam conciliar a filosofia greco-romana e os princípios do cristianismo, oferecendo uma leitura racionalizada da religião, sem descaracterizar a ideia de sobrenatural e de fé. Suas reflexões sobre o livre-arbítrio, a existência e a percepção do mal e a busca pela virtude pelos humanos foram base para reflexões filosóficas do iluminismo à contemporaneidade. Considerando essas informações, qual dos seguintes temas éticos direciona as reflexões de Santo Agostinho? A) Hedonismo: defesa da busca pelo prazer como o caminho para a realização pessoal. B) Utilitarismo: escolha de ações pela felicidade geral, na maior porcentagem possível. C) Virtude: defesa da virtude como uma forma de aproximação do fiel à Deus. D) Existencialismo: compreensão da natureza da existência humana. E) Niilismo: questionamento da legitimidade de valores morais em contextos mundanos. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Locação da obra No caso de obras de grande área (m2), erros acumulados de alinhamento podem acarretar perda de tempo e dinheiro, sendo conveniente, portanto, o auxílio da topografia. Para esse tipo de obra, que tem muitos elementos (fundações, paredes, etc.), qual é o processo ideal de locação? A) Processo dos cavaletes. B) Processo dos piquetes. C) Processo dos perfis metálicos. D) Processo dos tapumes (ou gabaritos ou tábuas corridas). E) Locação com auxílio das construções vizinhas. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |