Поток 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.

0 ответов

Другие вопросы по тегам