Приоритет операции на Java. (Объект создается и запускается до обновления графического интерфейса пользователя?)

Я хочу, чтобы графический интерфейс пользователя изменил название кнопки с «Go» на «Working...», прежде чем объект будет создан и фактически выполнит работу. После завершения, я хочу, чтобы название кнопки переключилось обратно в «Go».

Вот код:

    private class convert implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton)e.getSource();

        button.setText("Working...");
        button.setEnabled(false);

        anObject name = new AnObject();
        boolean result = name.methodName(chooser.getSelectedFile(),encoding);

        // A bunch of stuff was here but irrelevant to the question,
        // so it was removed to save room.

        button.setEnabled(true);
        button.setText("Go");
    }

Что на самом деле происходит на практике имя создается, methodName вызывается, и ЗАТЕМ кнопка обновляется на экране, несмотря на то, что я сказал ВМ изменить название кнопки первым.

Моя рабочая теория, учитывая, что я не сделал эту программу многопоточной, это имеет какое-то отношение к рабочему приоритету, или внутренней многопоточности JVM, или что-то такое...

Есть предложения?

-121--1540019- Эффективный метод поиска случайных чисел без конфликтов У меня есть таблица пользователей, идентификатор пользователя является открытым. Но я хочу запутать количество зарегистрированных пользователей и тенденции проекта, поэтому я не хочу иметь общие увеличивающиеся идентификаторы. Когда новый пользователь...

У меня есть таблица пользователей, идентификатор пользователя является открытым. Но я хочу запутать количество зарегистрированный пользователь и тенденции проекта, поэтому я не хочу иметь общие увеличивающиеся идентификаторы.

При создании нового пользователя необходимо найти случайное целое число, которое больше определенного числа и которого еще нет в базе данных.

Наивный код:

<?php
    $found = false;
    while(!$found) {
      $uid = rand(1000000000,4294967295) // find random number betwen minimum and maximum
      $dbh->beginTransaction();
      // check if user id is in use, and if not insert it
      if($dbh->query("SELECT * FROM users WHERE uid = $uid")) {
        $dbh->exec("INSERT INTO users (uid) VALUES ($uid)");
        $found = true;
      }
      $dbh->commit();
    }
    // we just got our new uid ...
?>

Это сработает, но может стать неэффективным. Правда, что есть большой диапазон и вероятность попадания неиспользуемого uid высока. Но что, если я хочу использовать меньший диапазон, потому что я не хочу иметь таких длинных пользователей?

Пример моих опасений:

  • 60% всех используемых идентификаторов пользователей
  • вероятность попадания неиспользуемого идентификатора составляет 0,4
  • , первая попытка имеет 0,4% успешность
  • , если 1-я неудачная вторая попытка имеет 0,6 * 0,4 вероятности
  • , так что при максимуме двух попыток i имеют 0,4 + 0,6 * 0,4 управляемости (это правильно??)

Так что один метод оптимизации заключается в том, что

  • найти случайное число, проверить, если его свободное, если нет, увеличить его на 1 и повторить попытку и так далее
  • , если максимальное число поражено, продолжить с минимальным числом

Это должно дать мне число с максимальным временем выполнения O(Диапазон)

Это звучит довольно плохо, но я думаю, что это не так, потому что я представляю случайные числа в базу данных и что все они в начале очень маловероятно. Итак, насколько это хорошо/плохо на самом деле?

Я думаю, что это будет работать просто хорошо, но я хочу, чтобы это ЛУЧШЕ

Так что насчет этого?

  • найти случайное число
  • запрос базы данных, сколько чисел заняты в диапазоне весь диапазон, начиная с этого числа (этот первый шаг тривиальный...)
  • , если есть числа заняты в этом диапазоне,делите диапазон наполовину и повторите попытку. начиная с начального числа
  • , если имеются занятые числа, делите диапазон наполовину и повторите попытку. начиная с начального числа

Если я думаю правильно, это даст ma число с максимальным O (регистрация (диапазон) времени.

Это довольно удовлетворительно, потому что регистрация () довольно хорош. Однако я думаю, что этот метод часто будет настолько плохим, насколько это возможно. Потому что с нашими случайными числами мы, вероятно, всегда будем поражать числа в больших интервалах.

Так что в начале наш чистый случайный метод, вероятно, лучше.

Так что насчет ограничения, как это

  • выбрать текущее число используемых чисел
  • является ли оно больше, чем X, логарифмический диапазон подход
  • , если это не так, использовать чисто случайный метод

Что было бы X и почему?

Так что последний вопрос:

Это довольно легко и довольно сложно в то же время.

Я думаю, что это стандартная проблема, потому что много и много систем используют случайные идентификаторы (билеты поддержки и т.д.), поэтому я не могу представить, что я первый, кто наткнулся на это.

Как бы вы решили эту проблему? Любые входные данные приравниваются!

Существует ли для этого класс/процедура, которую я могу использовать?

Или некоторые функции базы данных, которые я могу использовать?

Я хотел бы сделать это в PHP/Mysql

ВАЖНАЯ ПРАВКА:

Я просто подумал о диапазоне/логарифмическом решении. Кажется, это полная чушь извините за мою формулировку потому что:

  • что если я попаду в занятую цифру в начале?

Тогда я делю свой диапазон так долго, если он только 1. И даже тогда номер занят.

Так что его полностью то же, что и чисто случайный метод с самого начала, только хуже....

Я немного смущен, что я выдумал это, но я оставлю это, потому что я думаю, что это хороший пример слишком сложного мышления!

18
задан The Surrican 24 July 2011 в 17:53
поделиться