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

Problema com Threads

olá amigos, segue um código onde eu realizo uma busca infinita por numero primos, porém, minhas threads não executam ao mesmo tempo, como eu posso resolver isto ?

package primos;

import javax.swing.JButton;

/**
 *
 * @author id800762
 */
public class Primos extends javax.swing.JFrame {

    private int percorrer = 5000;
    private int inicial = 1;

    /**
     * Creates new form Primos
     */
    public Primos() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jtbInicia = new javax.swing.JToggleButton();
        jlCount = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtaNumeros = new javax.swing.JTextArea();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jtbInicia.setFont(new java.awt.Font("Segoe UI", 0, 24)); // NOI18N
        jtbInicia.setText("Inicia");
        jtbInicia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jtbIniciaActionPerformed(evt);
            }
        });

        jlCount.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N

        jtaNumeros.setColumns(20);
        jtaNumeros.setRows(5);
        jScrollPane1.setViewportView(jtaNumeros);

        jLabel1.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
        jLabel1.setText("Nº encontrados: ");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jtbInicia, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jlCount, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(5, 5, 5)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel1)
                            .addComponent(jlCount, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(23, 23, 23)
                .addComponent(jtbInicia, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>                        
private int i, qtd = 0;

    private void jtbIniciaActionPerformed(java.awt.event.ActionEvent evt) {                                          
//        Thread t1 = new Thread();
//        t1.ted(5);
//        ted(5);

//        Thread t1, t2,t3 = new Thread();
        if (jtbInicia.isSelected()) {
            for (int j = 0; j < 6; j++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        G:
                        while (true) {
                            int ini = getInicial();

                            for (int j = ini; j < ini + percorrer; j++) {
                                if (verificaPrimo(j)) {
                                    aumentaQtde(j);
                                }
                                if (!jtbInicia.isSelected()) {
                                    break G;
                                }
                            }
                        }
                    }
                }).start();
            }
        }
    }                                         

    /**
     *
     * @return
     */
    public synchronized int getInicial() {
        int ultimo = inicial;
        inicial += percorrer;
        return ultimo;
    }

    public synchronized void aumentaQtde(int n) {
        jtaNumeros.setText(jtaNumeros.getText() + n + "\n");
        qtd++;
        jlCount.setText(qtd + "");
    }

//    public boolean verificaPrimo(int n) {
//        boolean retorno = false;
//        int verifica = 0;
//        i = n - 1;
//        while (i > 1) {
//            if (n % i == 0) {
//                verifica++;
//                break;
//            }
//            i--;
//        }
//        if (verifica == 0) {
//            retorno = true;
//        }
//        return retorno;
//    }
    public boolean verificaPrimo(int n) {
//        boolean retorno = false;
        int verifica = 0;
        i = n - 1;
        while (i > 1) {
            if (n % i == 0) {
                verifica++;
                break;
            }
            i--;
        }

        return verifica == 0;
//        if (verifica == 0) {
//            return true;
//        }
//        return false;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Primos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Primos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Primos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Primos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Primos().setVisible(true);
            }
        });

    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel jlCount;
    private javax.swing.JTextArea jtaNumeros;
    private javax.swing.JToggleButton jtbInicia;
    // End of variables declaration                   
}
  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!

2 respostas

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