I am having problem dealing with synchronization java threads, applying wait and notify..
I want to figure out how could I implement these in a program where I can print out the answer alternately.. for example person1 will count numbers 1-5 as well as person2, the output should be like this.
person1 count 1
person2 count 1
person1 count 2
person2 count 2
person1 count 3
person2 count 3
person1 count 4
person2 count 4
person1 count 5
person2 count 5
Thanks guys.
You could do this easily in two ways:
Pass a 'print token' between the threads using two semaphores: thread 1 prints, signals semaphore A, waits on semaphore B then loops. Thread 2 waits on semaphore A, prints, signals semaphore B and loops.
Write in-line, single-threaded code.
Don't use wait and notify. Use syncronized blocks.
For an in-depth explaination of how the Java Monitor works, including code examples, you can go here: http://www.artima.com/insidejvm/ed2/threadsynch.html
The whole purpose of threaded programs is asynchronous operation of the threads. That's how you get a performance boost because the different tasks can work on different CPUs/cores concurrently, without having to synchronize on each other. To force this sort of synchronized, lock step output is by definition forcing threads to do something atypical.
@Martin's answer provides alternatives to get it to work.