I have a problem in my project.Some thing like I will be spawning n number of threads.These threads have a increment two variables x and y.And these threads have to run infinitly each time incrementing and using those variables.After some time I am getting these variables being increments out of sync though i am incrementing them in a syncronized method. ex: if I give initial variables as x = 100 and y =200.after running the program say after 5 min those variables are becoming something like 144 & 251 but I am expecting them to be 191 & 291. my method is like this
static long x = 0; static long y = 0; public void run() { while(true) { increment();//increments the variables } if(someCondition) { thread.yield(); return;//terminating execution } }
static synchronized increment() { x++; y++; }
Ernest Friedman-Hill
author and iconoclast
Marshal
I have a problem in my project.Some thing like I will be spawning n number of threads.These threads have a increment two variables x and y.And these threads have to run infinitly each time incrementing and using those variables.After some time I am getting these variables being increments out of sync though i am incrementing them in a syncronized method. ex: if I give initial variables as x = 100 and y =200.after running the program say after 5 min those variables are becoming something like 144 & 251 but I am expecting them to be 191 & 291. my method is like this
static long x = 0; static long y = 0; public void run() { while(true) { increment();//increments the variables } if(someCondition) { thread.yield(); return;//terminating execution } }
static synchronized increment() { x++; y++; }
Have you tried making x and y volatile?
Jim Yingst
Wanderer
Sheriff
Joined: Jan 30, 2000
Posts: 18670
posted
0
Volatile will not help here - you may read the values when x has been incremented but y has not. EFH's answer is correct:
Because this method is synchronized the same way the increment() method is, it should always see the same values for x and y. (Assuming there are no other unsynchronized methods that change x and y.)