Поток Java, потребитель не хочет заканчивать
Почему мой поток (Runnable) не выходит из метода run(), как только он достигает конца блока?
Это код:
//1 Entry point for thread with run method
public void run() {
System.out.println("Hashmaker():/run(). " + threadName + " Running " );
try {
String original = in;
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(original.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
System.out.println("Hashmaker:/run(). original: " + original);
System.out.println("Hashmaker:/run(). digested(hex):" + sb.toString());
//src http://www.avajava.com/tutorials/lessons/how-do-i-generate-an-md5-digest-for-a-string.html
}
// Let the thread sleep for a while.
//Thread.sleep(7);
System.out.println("Hashmaker:/run(). Thread: " + threadName + " recieved a clear password = " + in);
//Save the hash
hash=sb.toString();
}
/*catch (InterruptedException e) {
System.out.println("Hashmaker:/run(). Thread " + threadName + " interrupted.");
} */
catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Hashmaker:/run(). Thread " + threadName + " exiting.");
}
В идеале он должен нормально заканчиваться, тогда мой метод main() запустил бы другие вещи:
public static void main(String[] args) throws Exception {
//Parse the args
if (args.length != 1) {
System.err.println("Main()/: String to MD5 digest should be first parameter\n");
System.out.println("Main()/: Require now a clear password with 4 char :");
sc = new Scanner(System.in);
in = sc.nextLine();
force = 2;
}
else{
in = args[0];
force = Integer.parseInt(args[1]);
}
//Set the count of Breakers
count=force;
//Make the hash
Hashmaker hm = new Hashmaker(in,"Hashmaker");
hm.start();
System.out.println("Main()/: Managing the breakers will start !");
//Get the hash
hash=hm.getHash();
//Manage the Breakers
f = new File(count);
for(int i=0; i<count;i++){
Hashbreaker hb = new Hashbreaker(hash,"HashBreaker"+i);
f.enfiler(hb);
hb.start();
}
}
НОРМАЛЬНЫЙ СЦЕНАРИЙ ДЛЯ МЕНЯ, IS: создайте и запустите поток, чтобы сгенерировать дайджест хеша MD5, получить хеш, передать поток потребителя им и обработать его до тех пор, пока один грубый хэш не даст секретный хэш "сравнения" == 1.