br.com.pense.produto.controller.MultiThreadsTest.java Source code

Java tutorial

Introduction

Here is the source code for br.com.pense.produto.controller.MultiThreadsTest.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.pense.produto.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 *
 * @author Felipe_Noguez
 */
public class MultiThreadsTest {

    private static final int NRO_THREADS = 1000;

    private static SemanticEngineImoveis engImoveis;

    public MultiThreadsTest() {
    }

    @BeforeClass
    public static void setUpClass() {
    }

    @AfterClass
    public static void tearDownClass() {
    }

    @Before
    public void setUp() {
        //        if (engImoveis == null){
        //            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-semantic.xml");
        //            engImoveis = (SemanticEngineImoveis)context.getBean("engineSemantica");
        //        }
    }

    @After
    public void tearDown() {
    }

    // TODO add test methods here.
    // The methods must be annotated with annotation @Test. For example:
    //
    // @Test
    // public void hello() {}

    @Test
    public void CarregamentoOntologia() {
        System.out.println(">>> CarregamentoOntologia");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext-semantic.xml");
        engImoveis = (SemanticEngineImoveis) context.getBean("engineSemantica");
    }

    @Test
    public void MultiThreads() {
        System.out.println(">>> MultiThreads: " + NRO_THREADS);
        System.out.println("- Disparando threads!");
        SemanticEngineThread s;
        Thread t;
        List<Thread> lst = new ArrayList<Thread>();
        for (int i = 0; i < NRO_THREADS; i++) {
            s = new SemanticEngineThread();
            s.setId(i);
            t = new Thread(s);
            lst.add(t);
            t.start();
        }

        System.out.println("- Monitorando " + NRO_THREADS + " threads!");
        List<Thread> auxList = new ArrayList<Thread>();
        while (!lst.isEmpty()) {
            //            auxList.clear();
            auxList = new ArrayList<Thread>();
            for (Thread x : lst) {
                if (x.isAlive()) {
                    auxList.add(x);
                }
            }
            lst = auxList;
            //            System.out.println("- "+ lst.size() +" ainda vivas.");
        }
        System.out.println("- Finalizado!");
    }

    private static class SemanticEngineThread implements Runnable {

        private int id;

        public void setId(int i) {
            id = i;
        }

        @Override
        public void run() {
            Random gerador = new Random();
            int numero = gerador.nextInt(6);
            String texto = "", resultado = "";
            switch (numero) {
            case 0:
                texto = "cobertura abaixo de R$ 300 mil";
                resultado = "{Preo=[:300000], Tipo de imvel=[Cobertura]}";
                break;
            case 1:
                texto = "cobertura com 2 a 3 dormitorios, 2 a 3 suites, banheiro com garagem piscina churrasqueira";
                resultado = "{Banheiros=[1:], Infraestrutura=[Piscina], Caractersticas=[Churrasqueira], Dormitrios=[2:3], Sutes=[2:3], Vagas de garagem=[1:], Tipo de imvel=[Cobertura]}";
                break;
            case 2:
                texto = "cobertura com dormitorios, suites, banheiros com garagem piscina churrasqueira";
                resultado = "{Banheiros=[1:], Infraestrutura=[Piscina], Caractersticas=[Churrasqueira], Dormitrios=[1:5], Sutes=[1:5], Vagas de garagem=[1:], Tipo de imvel=[Cobertura]}";
                break;
            case 3:
                texto = "cobertura a partir de R$ 3mil com piscina";
                resultado = "{Preo=[3000:], Infraestrutura=[Piscina], Tipo de imvel=[Cobertura]}";
                break;
            case 4:
                texto = "apartamento mobiliado em porto alegre 2 dormitorios rs";
                resultado = "{cidade=[Porto Alegre], estado=[rio grande do sul], Caractersticas=[Mobiliado], Dormitrios=[2:2], Tipo de imvel=[Apartamento]}";
                break;
            case 5:
                texto = "poa";
                resultado = "{cidade=[Porto Alegre]}";
                break;
            }
            //            System.out.println("-- Thread: " + id + " numero: "+ numero + " : " + engImoveis.obtemParametros(texto) + ": " + texto);
            //            System.out.println("-- Thread: " + id + " numero: "+ numero + " : " + texto);
            try {
                //                assertEquals(resultado, engImoveis.getResultsAsString());
                assertEquals(resultado, engImoveis.obtemParametrosAsString(texto));
                //                System.out.println("-- Thread: " + id + " OK");
            } catch (Exception e) {
                //                System.out.println("-- Thread: " + id + " Erro: obtido: " + engImoveis.getResultsAsString() + "aguardado: " + resultado);
            }
        }

    }
}