can someone tell me the difference between the method stampaVector() and stampaVector2() in the following example?
public class ThreadConcurrence implements Runnable{
ArrayList<Integer> list=null;
public ThreadConcurrence(ArrayList<Integer> list){
this.list = list;
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i<5; i++){
list.add(i);
}
//Threads shares same list object
ThreadConcurrence tc1 = new ThreadConcurrence(list);
ThreadConcurrence tc2 = new ThreadConcurrence(list);
Thread t1 = new Thread(tc1);
Thread t2 = new Thread(tc2);
t1.start();
t2.start();
}
@Override
public void run() {
stampaVector();
//stampaVector2();
}
public void stampaVector(){
synchronized(this.list){
for(Integer i:this.list){
System.out.println("StampaVector: "+Thread.currentThread().getName()+" "+i);
}
}
}
public synchronized void stampaVector2(){
for(Integer i:this.list){
System.out.println("StampaVector2: "+Thread.currentThread().getName()+" "+i);
}
}
}
Output executing stampaVector():
StampaVector: Thread-0 0
StampaVector: Thread-0 1
StampaVector: Thread-0 2
StampaVector: Thread-0 3
StampaVector: Thread-0 4
StampaVector: Thread-1 0
StampaVector: Thread-1 1
StampaVector: Thread-1 2
StampaVector: Thread-1 3
StampaVector: Thread-1 4
Output executing stampaVector2():
StampaVector2: Thread-0 0
StampaVector2: Thread-1 0
StampaVector2: Thread-1 1
StampaVector2: Thread-1 2
StampaVector2: Thread-0 1
StampaVector2: Thread-1 3
StampaVector2: Thread-1 4
StampaVector2: Thread-0 2
StampaVector2: Thread-0 3
StampaVector2: Thread-0 4
I would have expected the same output of stampaVector() (only one thread access the list object at time), for the method stampaVector2().
Thanks