您的位置:首页 > 其它

如何判断多个线程是否共享资源

2015-10-09 12:08 246 查看
在一个程序中有多个线程,如何确定线程间操作的是不是一个资源(变量,内存)?

看不同的线程是否指向的同一个对象,如下图:

注意:Java中使用地址判断对象是否为同一个对象。地址相同就是同一个对象



<span style="font-family:FangSong_GB2312;font-size:18px;">import org.junit.Test;

public class Test1 {
@Test
public void pub() {
// 建立三个不同的线程,同时修改num中的i变量
MyNum num = new MyNum();
AddNum add1, add2, add3;
add1 = new AddNum(num);
add2 = new AddNum(num);
add3 = new AddNum(num);

add1.start();
add2.start();
add3.start();
}
}

class MyNum {

int number = 0; // 定义个计数器
String type = "整形";

}

class AddNum extends Thread {

MyNum my = new MyNum();

public AddNum(MyNum myNum) {
// TODO Auto-generated constructor stub
my = myNum; // 因为myNum是一个类,在传值和赋值是都是传递的地址
}

public synchronized void addMethod() { // synchronized修饰保证一个线程修改number。
my.number++;
System.out.println(my.number);
}

public void run() {
while (true) {
this.addMethod();
}
}

}</span>
注意:
如果把上面的例子中传递对象实例换成基本数据类型(int,byte,……)是不行的。因为基本数据类型赋值时传递的不是对象地址,而是新建一个基本类型然后赋值。也就是线程不能指向同意对象了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 同一个 变量