Java: библиотеки Swing и безопасность потоков - PullRequest
22 голосов
/ 08 октября 2008

Я часто слышал критику по поводу отсутствия безопасности потоков в библиотеках Swing. Тем не менее, я не уверен, что то, что я буду делать в своем собственном коде, может вызвать проблемы:

В каких ситуациях в игру вступает тот факт, что Swing не безопасен для потоков?

Что я должен активно избегать?

Ответы [ 11 ]

1 голос
/ 09 октября 2008

Вот шаблон для makng swing-freindly.

Sublass Action (MyAction) и сделайте его doAction многопоточным. Заставьте конструктора взять имя строки.

Дайте ему абстрактный метод actionImpl ().

Пусть это будет похоже на * (предупреждение псевдокода!)

doAction(){
new Thread(){
   public void run(){
    //kick off thread to do actionImpl().
       actionImpl();
       MyAction.this.interrupt();
   }.start();  // use a worker pool if you care about garbage.
try {
sleep(300);
Go to a busy cursor
sleep(600);
Show a busy dialog(Name) // name comes in handy here
} catch( interrupted exception){
  show normal cursor
}

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

Если вы хотите быть по-настоящему милым, спите в другом рабочем потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...