+ 1

Why output for every thread is 0?

MultipleThread on volatile https://code.sololearn.com/cQXwdYBMFzyz/?ref=app

11th Jun 2018, 2:03 PM
Shankar Sen
Shankar Sen - avatar
12 Réponses
+ 2
Yes!! you are right!! The value i is already inside the loop ie. for(int i=1; i<=5; i++) { vt = new VolatileThread(vd, i); } See variable i is already there, I want this value of i to be printed in write() & read() method. Can you help it out??
11th Jun 2018, 4:51 PM
Shankar Sen
Shankar Sen - avatar
+ 1
Hello Donna! Thanks for your response! Not only have I passed an object of class VolatileDemo as a parameter to the class VolatileThread but also the parameter 'int i' and with every pass of loop, a new value of parameter is also passed which in turn updates the variable i of class VolatileThread & that updated value of variable i of VolatileThread is passed as a parameter to the function call in class VolatileThread. But I don't get the desired output. Obviously there may be some fault. Can you please pin point my mistake?
11th Jun 2018, 3:20 PM
Shankar Sen
Shankar Sen - avatar
+ 1
Hello!! Donna. Have you find any way yet to solve that??
11th Jun 2018, 5:30 PM
Shankar Sen
Shankar Sen - avatar
+ 1
Hello Donna!! Finally I have come with a solution. Instead of using == in (t.getName()=="Write"+i), if we use equal() operator in (t.getName().equals("Write"+i)), I am getting the desired ouput. Strings can't be compared using any relational operator like ==, <, >, <=, >=. Anyway, thanks a lot for your cooperation.
12th Jun 2018, 5:52 AM
Shankar Sen
Shankar Sen - avatar
0
Write1 1 Read1 1 Write2 2 Read2 2 Write3 3 Read3 3 Write4 4 Read4 4 Write5 5 Read5 5 The sequence of this output may differ because you don't know which thread will execute first. But the content of output must be this.
11th Jun 2018, 3:53 PM
Shankar Sen
Shankar Sen - avatar
0
For eg. You may also get Write1 1 Write2 2, Write3 3 Read1 3 Read2 3 Write4 4 Read3 4 Read4 4 Write5 5 Read5 5 It depends on the execution of thread-which thread will execute when....But there must be some numeric value for each thread instead of only 0.
11th Jun 2018, 4:01 PM
Shankar Sen
Shankar Sen - avatar
0
No no dear....you are mistaken!! What you have done is: String str = "Write"+i+" "+i; and you pass this as parameter. Which means what you get as output, you have simply passed the output as input. Moreover, What about the value 'i' ? ie. vt = new VolatileThread (vd, i); In the class VolatileThread, again this 'i' is passed as parameter in method call write(i) which then output the value of 'i' in System.out.println(t.getName + " " + i); And this 'i' is missing in your System.out.println() statement in both write() & read() function. Please notice it. As I have mentioned earlier in my comment, the sequence of output may change. But there must be some numeric value within the range of 1 to 5 for each thread, not only 0. Write1, Write2.....Read1, Read2.... are only threads, not the value of 'i'. Read1 1 the latter 1 is the value of 'i'.
11th Jun 2018, 4:36 PM
Shankar Sen
Shankar Sen - avatar