第一个 main.java
package threadTest; public class main { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub System.out.println("=======1========"); values va = new values(); va.setA(2); System.out.println("main:" + va.getA()); System.out.println("=======2========"); threademo td = new threademo(); td.start(); td.join(); System.out.println("=======3========="); System.out.println("mainThread:" + va.getA()); } }
第二个 threademo.java
package threadTest; public class threademo extends Thread{ values vv = new values(); public void run() { vv.setA(10); System.out.println("thread:" + vv.getA()); } }
第三个 values.java
package threadTest; public class values { private volatile int a; // private int a; public synchronized void setA(int a) { this.a = a; System.out.println("seta:" + this.a); } public synchronized int getA() { return this.a; } }
运行的结果是:
=======1======== seta:2 main:2 =======2======== seta:10 thread:10 =======3========= mainThread:2
第1部分结果,就是实例化values 用set方法赋值,在用get方法返回值 打印出来。
第2部分结果,是用td线程 实例化values 然后用set重新赋值,在用get返回打印出来。
第3部分结果,是main里在次用get返回值。但它还是2,为什么不是调用线程后的10呢??
我想让第3处 返回的是10 该怎么做呢???
你这个第三部分的va就是第一部分的va啊 跟第二部分的va没有任何关系,,第二部分是你自己new出来的set 10进去,第3的还是跟第一的一样是你set 2的,。。我觉得你是需要将第一部分里面的va传入到第2部分里面的线程 去跑,而不是在第二部分的线程里面又new了个va 。。
你的values每次都是new出来的,不同对象的数据,当然是不同的啊
怎么办呢?
@还没有: 如果你想所有东西访问的都是同一个,那么就静态呗。搜下单例的概念。。。