How to find subsets of a given strings using Multithreads

This is the fourth solution to list all the subsets or substrings of a given strings from the ArrayList of Strings, using Multithreads. This program uses the Multithreads concept, and uses the String’s class substring method for intermediate processing of all sized sub strings.

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SubsetsOfGivenStrings {

	public static void main(String[] args) throws InterruptedException {

		List<String> allStrings = new ArrayList<String>();
		allStrings.add("Sowmyanath");
		allStrings.add("Sivani");
		allStrings.add("Rajeshwari");
		allStrings.add("Anjanisurekha");
		allStrings.add("Nagendra");

		List<SubsetThread> threads = new ArrayList<>();

		for (String word : allStrings)
			threads.add(new SubsetThread(1, 0, 1, word));

		for (Thread thread : threads) {
			thread.start();
		}

		// Main thread wait until all the child threads completes.
		for (Thread thread : threads) {
			thread.join();
		}

		for (int i = 0; i < allStrings.size(); i++) {
			SubsetThread subsetThread = threads.get(i);
			if (subsetThread.isFinished()) {
				System.out.println("Subsets of " + allStrings.get(i) + " are " + subsetThread.getAllSubsets());
			} else {
				System.out.println("The calculation of subsets for " + allStrings.get(i) + " is still in progress");
			}
		}
	}

	public static class SubsetThread extends Thread {

		private Set<String> finalSubsetStrs = new HashSet<String>();
		private int sizeOfSubstr;
		private int beginIdx;
		private int endIdx;
		private String inpStr;
		private boolean isFinished;

		// Initialize the constructor begin, end index params.
		// and initialize the substring, and it's size
		SubsetThread(int a, int b, int c, String d) {
			this.sizeOfSubstr = a;
			this.beginIdx = b;
			this.endIdx = c;
			this.inpStr = d;
		}

		// call the subsets routine from the run, and set finished to TRUE
		public void run() {
			this.finalSubsetStrs = Subsets(inpStr);
			isFinished = true;
		}

		public Set<String> Subsets(String inpWord) {
			// Iterate the loop until the substring's length is equals with length of the
			// actual string
			while (sizeOfSubstr <= inpWord.length()) {

				// Iterate the substring sized loop until the subscript less than or equals the
				// actual length
				while (beginIdx < inpWord.length() && endIdx <= inpWord.length())
					finalSubsetStrs.add(inpWord.substring(beginIdx++, endIdx++));

				sizeOfSubstr++; // Increment size of sub string for the next iteration
				beginIdx = 0;
				endIdx = sizeOfSubstr;
			}
			return finalSubsetStrs;
		}

		public boolean isFinished() {
			return isFinished;
		}

		public Set<String> getAllSubsets() {
			return finalSubsetStrs;
		}
	}
}
OUTPUT:
Subsets of Sowmyanath are [yana, owm, ya, anat, wmyan, myana, myanath, Sowmyana, ath, myanat, Sowmyan, owmya, nat, owmy, Sowmy, Sowmyanat, my, Sowmya, an, na, at, mya, anath, owmyanat, yanat, S, nath, ana, wm, owmyanath, wmyana, owmyana, wmyanat, a, wmy, yan, h, ow, wmya, myan, owmyan, yanath, m, n, o, wmyanath, Sowmyanath, t, th, Sowm, w, y, Sow, So]

Subsets of Sivani are [a, Siv, van, Siva, i, va, ivan, iv, an, n, Sivan, vani, ivani, S, iva, v, Si, ni, Sivani, ani]

Subsets of Rajeshwari are [eshwa, hw, jeshwari, eshw, ajeshwar, Rajeshwari, hwari, Rajeshwar, jes, ajeshwari, jeshw, aj, Rajeshwa, jeshwar, es, ar, hwar, hwa, wari, ri, ajesh, ajes, je, jeshwa, shw, wa, Ra, R, sh, Rajes, ajeshwa, ari, aje, a, jesh, e, h, i, war, Rajesh, j, shwa, Raje, ajeshw, eshwar, r, Rajeshw, s, shwar, w, shwari, eshwari, Raj, esh]

Subsets of Anjanisurekha are [janis, ekh, jani, isure, isurekha, isu, nisur, isurekh, njanisurek, janisurekh, anisurekh, isurek, jan, nisurekha, nis, rek, ur, anisure, njani, urekha, sure, nja, kha, ek, njanisure, Anjanisu, is, an, Anjanisure, janisurekha, ekha, anisur, re, anisurekha, anisu, urek, ja, Anjanisurekh, anis, Anjanisurek, ni, nj, Anj, nisurek, nisurekh, A, janisur, janisurek, Anjanisur, An, sur, surekh, Anjani, njan, Anja, njanisu, kh, ani, a, su, nisure, urekh, rekha, e, rekh, surekha, h, njanisurekha, i, ure, j, k, njanis, njanisur, janisure, Anjan, anisurek, n, nisu, r, s, u, isur, janisu, ha, Anjanis, njanisurekh, Anjanisurekha, surek]

Subsets of Nagendra are [gendr, Nagend, gendra, endra, Nagendra, N, dr, gen, dra, Na, Nage, ndra, endr, end, ge, a, agen, d, gend, e, Nagen, ag, agendra, g, en, Nagendr, n, ra, r, agend, Nag, nd, agendr, ndr, age]