private synchronized List<Patro> buscarPatronsConegutsParalel(List<String> patrons,boolean insertions) throws InterruptedException {
        List<Patro> resultat = new ArrayList<Patro>();
        int nprocs = Runtime.getRuntime().availableProcessors();
        if (nprocs <= 1) {
            return buscarPatrons(patrons,insertions);
        }
        int tamBloc = patrons.size() / nprocs;
        if (tamBloc == 0) {
            if (patrons.size() > 1) {
                ModulParalelitzacio moduls[] = new ModulParalelitzacio[patrons.size() - 1];
                for (int i = 1; i < patrons.size(); i++) {
                    moduls[i - 1] = new ModulParalelitzacio(patrons.subList(i, i + 1), this, false,insertions);
                    new Thread(moduls[i - 1]).start();
                }
                resultat.addAll(buscarPatrons(patrons.subList(0, 1),insertions));
                for (int i = 0; i < moduls.length; i++) {
                    resultat.addAll(moduls[i].getPatrons());
                }
            } else {
                return buscarPatrons(patrons,insertions);
            }
        } else {
            ModulParalelitzacio moduls[] = new ModulParalelitzacio[nprocs - 1];
            for (int i = 1; i < nprocs; i++) {
                if (i < nprocs - 1) {
                    moduls[i - 1] = new ModulParalelitzacio(patrons.subList(i * tamBloc, (i + 1) * tamBloc), this, false,insertions);
                } else {
                    moduls[i - 1] = new ModulParalelitzacio(patrons.subList(i * tamBloc, patrons.size()), this, false,insertions);
                }
                new Thread(moduls[i - 1]).start();
            }
            resultat.addAll(buscarPatrons(patrons.subList(0, tamBloc),insertions));
            for (int i = 0; i < moduls.length; i++) {
                resultat.addAll(moduls[i].getPatrons());
            }
        }
        return resultat;
    }