1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Achando Região Crítica de Threads

Bom dia Pessoal,

estou com a seguinte duvida em meu código, referente a achar a região critica e introduzir o sincronismo para elas, coloquei alguns SYNCHRONIZED e THROWS Exception, só que porém o código continua executando a mesma coisa que estava antes..., Alguem poderia me ajudar a identificar ou uma técnica de identificar a região crítica de forma mais simples ?

Código:

 public class Matematico {
    public static void main(String[] args) throws Exception {
        int limite = 1000;

        MutableInteger compartilhado = new MutableInteger();
        compartilhado.setValor(0);

        Thread somador = new Thread(new Somatorio(limite,compartilhado));
        somador.start();

        //Adicionado
        int limite2 = 2000;
        int limite3 = 3000;
        int limite4 = 4000;
        int limite5 = 5000;

        MutableInteger compartilhado2 = new MutableInteger();
        compartilhado2.setValor(2);

        Thread somador2 = new Thread(new Somatorio(limite2,compartilhado2));
        somador2.start();

        MutableInteger compartilhado3 = new MutableInteger();
        compartilhado3.setValor(3);

        Thread somador3 = new Thread(new Somatorio(limite3,compartilhado3));
        somador3.start();

        MutableInteger compartilhado4 = new MutableInteger();
        compartilhado4.setValor(4);

        Thread somador4 = new Thread(new Somatorio(limite4,compartilhado4));
        somador4.start();

        MutableInteger compartilhado5 = new MutableInteger();
        compartilhado5.setValor(5);

        Thread somador5 = new Thread(new Somatorio(limite5,compartilhado5));
        somador5.start();

        try {

            somador.join();
            //Adicionado
            somador2.join();
            somador3.join();
            somador4.join();
            somador5.join();


            System.out.println("A soma de " + limite + " é " + compartilhado.getValor());
            System.out.println("A soma de " + limite2 + " é " + compartilhado2.getValor());
            System.out.println("A soma de " + limite3 + " é " + compartilhado3.getValor());
            System.out.println("A soma de " + limite4 + " é " + compartilhado4.getValor());
            System.out.println("A soma de " + limite5 + " é " + compartilhado5.getValor());
             } catch (InterruptedException e) {
            System.out.println("Ocorreu o seguinte erro em threads: " + e.toString());
        }
    }
}

class Somatorio implements Runnable {
    public Somatorio(int limite, MutableInteger valorSoma) {
        this.limite = limite;
        this.valorSoma = valorSoma;
    }

    public void run() {
        int soma = 0;
        for (int i = 0; i < limite; i++) {
            soma += i;
        }
        valorSoma.setValor(soma);
    }

    private int limite;
    private MutableInteger valorSoma;
}
class MutableInteger {
    private int valor;

    public int getValor() throws Exception { 
        synchronized (this) {
            return valor; 

        }

    }
    public void setValor(int valot) { 
        synchronized (this) {
        this.valor = valot; 
        }
    }

 }
  • Ouvi falar que existe um projeto da JBoss chamado Byteman que ajuda a debugar código Java. Talvez ajude...

    Roger75   26 de jun de 2013
  • Eu não entendi o que você quer fazer com esse código e qual o problema que você está enfrentando. Você poderia editar sua pergunta para explicar melhor?

    Felipe   26 de jun de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags threads ou faça a sua própria pergunta.