当成员变量为数组时:
结果为:
很明显,数组在run方法中和在构造函数中是不一致的,造成这种不一致的原因是,数组传递时地址传递,而不是值传递。
package com.smartsearch.monitor;
/**
* @author lh
*
*/
public class test {
public static void receive(int arr[]){
System.out.print("receive:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
System.out.println();
}
public static void main(String[] args) {
int arr[]=new int[3];
for(int j=0;j<5;j++){
arr[0]=j;
arr[1]=j;
arr[2]=j;
System.out.print("main:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
System.out.println();
TestThread th = new TestThread(arr);
Thread t = new Thread(th);
t.start();
}
}
}
package com.smartsearch.monitor;
/**
* @author lh
*
*/
public class TestThread implements Runnable{
private int arr[];
TestThread(int arr[]){
this.arr=arr;
System.out.print("construct:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
System.out.println();
}
public void run() {
System.out.print("run:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
System.out.println();
test.receive(arr);
}
}
结果为:
</pre><pre name="code" class="java">main:0,0,0,
construct:0,0,0,
main:1,1,1,
construct:1,1,1,
main:run:2,2,2,
construct:2,run:2,2,2,
2,2,2,
receive:2,2,2,3,
main:3,3,3,
receive:3,3,3,
3,
construct:3,run:3,3,
3,3,main:4,4,4,
construct:4,4,4,
run:4,4,4,
receive:4,4,4,
4,
receive:4,run:4,4,4,
4,4,
receive:4,4,4,
很明显,数组在run方法中和在构造函数中是不一致的,造成这种不一致的原因是,数组传递时地址传递,而不是值传递。