package com.freeflying.thread.sync;
/**
* @ClassName: MethodVarThreadSafe
* @Description:方法内的变量是线程安全的
* @author freeflying
* @date 2018年6月25日
*/
public class MethodVarThreadSafe {
public static void main(String[] args) {
MethodVarThreadSafeEx safeEx=new MethodVarThreadSafeEx();
MethodVarThreadSafeA safeA=new MethodVarThreadSafeA(safeEx);
safeA.start();
MethodVarThreadSafeB safeB=new MethodVarThreadSafeB(safeEx);
safeB.start();
}
}
class MethodVarThreadSafeEx{
public void add(String username) {
try {
int num = 0;
if("a".equals(username)) {
num=100;
System.out.println("a set over");
Thread.sleep(2000);
}else {
num=200;
System.out.println("b set over");
}
System.out.println(username + " num = "+num);
}catch (Exception e) {
// TODO: handle exception
}
}
}
class MethodVarThreadSafeA extends Thread{
private MethodVarThreadSafeEx safe;
public MethodVarThreadSafeA(MethodVarThreadSafeEx safe) {
this.safe=safe;
}
@Override
public void run() {
safe.add("a");
}
}
class MethodVarThreadSafeB extends Thread{
private MethodVarThreadSafeEx safe;
public MethodVarThreadSafeB(MethodVarThreadSafeEx safe) {
this.safe=safe;
}
@Override
public void run() {
safe.add("b");
}
}
结果:
b set over
b num = 200
a set over
a num = 100