public class HasSelfPrivateNum {
synchronized public void addI (String username){
int num = 0; try {
if (username.equals("a")){
num=100;
ViseLog.e("a set over!");
Thread.sleep(1000);
}else {
num=100;
ViseLog.e("b set over!");
}
ViseLog.e(username+num);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ThreadA extends Thread {
private HasSelfPrivateNum hasSelfPrivateNum;
public ThreadA (HasSelfPrivateNum hasSelfPrivateNum){
this.hasSelfPrivateNum=hasSelfPrivateNum;
}
@Override
public void run() {
super.run();
hasSelfPrivateNum.addI("a");
}
}
public class ThreadB extends Thread {
private HasSelfPrivateNum hasSelfPrivateNum;
public ThreadB (HasSelfPrivateNum hasSelfPrivateNum){
this.hasSelfPrivateNum=hasSelfPrivateNum;
}
@Override
public void run() {
super.run();
hasSelfPrivateNum.addI("b");
}
}
HasSelfPrivateNum A = new HasSelfPrivateNum();
ThreadA a = new ThreadA(A);
a.start();
ThreadB b = new ThreadB(A);
b.start();
// 实验结论,在两个线程访问同一个对象那个的同步方法时一定是线程安全的,由于同步访问,所以打印出a,然后打印出b
2.1.3 多个对象多个锁
HasSelfPrivateNum A = new HasSelfPrivateNum();
ThreadA a = new ThreadA(A);
a.start();
HasSelfPrivateNum B = new HasSelfPrivateNum();
ThreadB b = new ThreadB(B);
b.start();
09-20 15:44:54.025 20265-20319/com.vise.snowdemo E/ViseLog: HasSelfPrivateNum.addI(HasSelfPrivateNum.java:15): a set over!
09-20 15:44:54.025 20265-20320/com.vise.snowdemo E/ViseLog: HasSelfPrivateNum.addI(HasSelfPrivateNum.java:21): b set over!
09-20 15:44:54.025 20265-20320/com.vise.snowdemo E/ViseLog: HasSelfPrivateNum.addI(HasSelfPrivateNum.java:24): b100
09-20 15:44:54.155 17832-19615/? E/HsmCoreServiceImpl: onTransact in code is: 103
09-20 15:44:55.026 20265-20319/com.vise.snowdemo E/ViseLog: HasSelfPrivateNum.addI(HasSelfPrivateNum.java:24): a100
实例变量非线程安全public class HasSelfPrivateNum { synchronized public void addI (String username){ int num = 0; try { if (username.equals("a")){ num=100; ViseLog.e(