synchronized的同步方法
方法内的变量为线程安全的
"非线程安全" 问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,也就是线程安全。
public class HasSelfPrivateNum {
public void addI(String name) {
try {
int num = 0;
if ("a".equals(name)) {
num=100;
System.out.println("a set over!");
Thread.sleep(2000);
} else {
num = 200;
System.out.println("b set over!");
}
System.out.println(name +" num="+num);
} catch (Exception e) {
e.printStackTrace();
}
}
}
线程A
public class ThreadA extends Thread {
private HasSelfPrivateNum hasSelfPrivateNum;
public ThreadA(HasSelfPrivateNum hasSelfPrivateNum) {
this.hasSelfPrivateNum = hasSelfPrivateNum;
}
@Override
public void run() {
hasSelfPrivateNum.addI("a");
}
}
线程B
public class ThreadB extends Thread{
private HasSelfPrivateNum hasSelfPrivateNum;
public ThreadB(HasSelfPrivateNum hasSelfPrivateNum) {
this.hasSelfPrivateNum = hasSelfPrivateNum;
}
@Override
public void run() {
hasSelfPrivateNum.addI("b");
}
}
运行
public class Run {
public static void main(String[] args) throws Exception{
HasSelfPrivateNum hasSelfPrivateNum=new HasSelfPrivateNum();
ThreadA threadA=new ThreadA(hasSelfPrivateNum);
ThreadB threadB=new ThreadB(hasSelfPrivateNum);
threadA.start();
threadB.start();
}
}
运行结果:
a set over!
b set over!
b num=200
a num=100