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

来源:互联网 发布:ug编程软件下载 编辑:程序博客网 时间:2024/05/08 23:39

在一个程序中有多个线程,如何确定线程间操作的是不是一个资源(变量,内存)?

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

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

<span style="font-family:FangSong_GB2312;font-size:18px;">import org.junit.Test;public class Test1 {@Testpublic 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 stubmy = 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,……)是不行的。因为基本数据类型赋值时传递的不是对象地址,而是新建一个基本类型然后赋值。也就是线程不能指向同意对象了。



0 0
原创粉丝点击