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