2.2.7多個線程調用同一個方法是隨機的


package cha02.execise18;

import java.util.ArrayList;
import java.util.List;

/**
* Created by sunyifeng on 17/9/25.
*/
public class MyList {
private List list = new ArrayList<Object>();

synchronized public void add(String username) {
System.out.println("線程" + Thread.currentThread().getName() + "執行了add方法");
list.add(username);
System.out.println("線程" + Thread.currentThread().getName() + "退出了add方法");
}

synchronized public int getSize() {
System.out.println("線程" + Thread.currentThread().getName() + "執行了get方法");
int sizeValue = list.size();
System.out.println("線程" + Thread.currentThread().getName() + "退出了get方法");
return sizeValue;
}
}

package cha02.execise18;

/**
* Created by sunyifeng on 17/9/25.
*/
public class ThreadA extends Thread {
private MyList myList;

public ThreadA(MyList myList) {
super();
this.myList = myList;
}

@Override
public void run() {
for (int i = 0; i < 100; i++) {
myList.add("threadA" + (i + 1));
}
}
}
package cha02.execise18;

/**
* Created by sunyifeng on 17/9/25.
*/
public class ThreadB extends Thread {
private MyList myList;

public ThreadB(MyList myList) {
super();
this.myList = myList;
}

@Override
public void run() {
for (int i = 0; i < 100; i++) {
myList.add("threadB" + (i + 1));
}
}
}
package cha02.execise18;

/**
* Created by sunyifeng on 17/9/25.
*/
public class Test {
public static void main(String[] args) {
MyList myList = new MyList();
//
ThreadA threadA = new ThreadA(myList);
threadA.setName("A");
threadA.start();
//
ThreadB threadB = new ThreadB(myList);
threadB.setName("B");
threadB.start();
}
}
運行結果:

線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程A執行了add方法
線程A退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程B執行了add方法
線程B退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程A執行了add方法
線程A退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
線程B執行了add方法
線程B退出了add方法
程序說明:

同步塊中的代碼是同步打印的,當前線程的執行與退出都是成對出現,但是線程A、線程B的執行是異步的,這就可能出現臟讀的情況。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com