概述:我们都知道synchronized用做同步使之线程安全,然而 synchronized并不总是线程同步
代码实例:
public class ThreadSafe {
public static void main(String[] args) {
HasSelf numself=new HasSelf();
threadA aThreadA=new threadA(numself);
aThreadA.start();
threadB bThreadB=new threadB(numself);
bThreadB.start();
}
}
class HasSelf{
public void addI(String username){
try {
int num=0;
if(username.equals("a")){
num=100;
System.out.println("a set over");
// Thread.sleep(1);
}
else {
num=200;
System.out.println("b set over");
}
System.out.println(username+"num= "+num);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class threadA extends Thread{
private HasSelf numself;
public threadA(HasSelf numself) {
super();
this.numself=numself;
}
@Override
public void run() {
super.run();
numself.addI("a");
}
}
class threadB extends Thread{
private HasSelf numself;
public threadB(HasSelf numself) {
super();
this.numself=numself;
}
@Override
public void run() {
super.run();
numself.addI("b");
}
}
输出结果:
a set over
anum= 100
b set over
bnum= 200
去掉注释sleep结果:
a set over
b set over
bnum= 200
anum= 100
现在知道了吧
sleep:sleep让出cpu给其他线程