Я делал учебное пособие по методу параллельного программирования и метода Saw .join (), чтобы убедиться, что поток будет работать до завершения до продолжения остальной части кода. < /p>
Однако, когда я пытаюсь использовать 2 потока, чтобы увеличить и уменьшить переменную, как 100 раз (инициируемая ценность: 2000), конечный результат предполагает, что он показывает 2000, но он показывает, что меньше, чем 2000 или 2000 или 2000 года, только 2000 или меньше 2000 или 2000 года. Последовательно показывать 2000, когда я не понаправдуте Thread.sleep в main метод
public class Main {
public static void main(String[] args) {
SharedObj sharedObj = new SharedObj();
Thread thread1 = new Thread(new ThreadMinus(sharedObj));
Thread thread2 = new Thread(new ThreadPlus(sharedObj));
thread1.start();
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("number is: " + sharedObj.num);
System.out.println("increment count: " + sharedObj.countPos);
System.out.println("decrement count: " + sharedObj.countNeg);
}
}
class SharedObj {
public int num;
public int countPos = 0;
public int countNeg = 0;
public SharedObj() {
num = 2000;
}
public void change(int x) {
num += x;
if (x < 0) {
countNeg++;
} else {
countPos++;
}
System.out.println("number is: " + num + " with operation: " + x);
}
}
class ThreadMinus implements Runnable {
SharedObj sharedObj;
public ThreadMinus(SharedObj sharedObj) {
this.sharedObj = sharedObj;
}
@Override
public void run() {
for (int i = 1; i
Подробнее здесь: https://stackoverflow.com/questions/527 ... ng-problem
Java Thread Join () с интервалом сна, вызывающей проблему ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение