一:访问成员变量和局部变量区别
多个线程访问目标对象的成员变量,是相互影响的,因为他们访问的是同一个物理变量。
多个线程使用目标对象方法中的局部变量,是互不影响的,因为每个线程都会拷贝一个新的变量来使用。
二:区别案例
下述案例,创建两个线程访问同一个目标对象。对目标对象的有相同值成员变量和局部变量进行自减后出现了不同的值。
package com.thread.www; class PrimeRun5 implements Runnable{ int numObj =10; @Override public void run() { int numRun = 10; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } numRun --; numObj --; //打印成员变量 System.out.println(Thread.currentThread().getName()+" numObj="+this.numObj); //打印局部变量 System.out.println(Thread.currentThread().getName()+" numRun="+numRun); } } public class Test5成员变量和局部变量 { public static void main(String[] args) { PrimeRun5 peRun = new PrimeRun5(); new Thread(peRun).start(); new Thread(peRun).start(); } }
运行结果:
参考资料:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913659.html