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
文章来源: 方法内的变量是线程安全的