Условия в многопоточности - PullRequest
0 голосов
/ 17 мая 2018

У меня есть этот кусок кода, который контролирует два потока.

synchronized public void run() {
  switch(ThreadChoice){
      case 1:
      dataBase();
      break;
      case 2:
      ViewTotal.choice=1;new ViewTotal().displayDatabase();
     break;
  }
}

Когда я использую оператор SWITCH , он работает нормально, но если я использую if, if-else или if-else-if , он не будет работать правильно. Вот код с if оператором.

synchronized public void run() {

  if(ThreadChoice==1)dataBase();
  else if(ThreadChoice==2)ViewTotal.choice=1;new ViewTotal().displayDatabase();
}

при использовании регистра , если , он выполняет код в обоих условиях, но при использовании ключа он выполняет только указанный регистр. Может кто-нибудь, пожалуйста, уточните это. я сильно запутался в этом. Заранее спасибо

1 Ответ

0 голосов
/ 17 мая 2018

Это:

if(ThreadChoice==1)dataBase();
else if(ThreadChoice==2)ViewTotal.choice=1;new ViewTotal().displayDatabase();

совпадает с:

if(ThreadChoice==1) {
  dataBase();
} else if(ThreadChoice==2) {
  ViewTotal.choice=1;
}
new ViewTotal().displayDatabase();

Если вы хотите, чтобы new ViewTotal().displayDatabase(); выполнялся только для ThreadChoice==2, вам нужно использовать фигурные скобки, ипоместите его в соответствующую фигурную скобку:

if(ThreadChoice==1)dataBase();
else if(ThreadChoice==2) { ViewTotal.choice=1;new ViewTotal().displayDatabase(); }

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

...