请教Java 多线程高手一个简单的“线程对象是否共用线程类的成员变量”的问题。 20
高手,小弟在这里做一下细节阐述:高手,小弟用线程类定义了一个线程对象,跑起来。小弟再次用线程类定义了第二个线程对象,跑起来。小弟希望高手点拨:如果小弟用第一个线程对象修改...
高手,小弟在这里做一下细节阐述:
高手,小弟用线程类定义了一个线程对象,跑起来。
小弟再次用线程类定义了第二个线程对象,跑起来。
小弟希望高手点拨:
如果小弟用第一个线程对象修改了线程类中的一个成员变量的值,当小弟再次拿第二个线程对象来面对前面的线程类中的成员变量时,小弟应该认为:这里的成员变量的值,是被第一个线程对象修改后的值? 还是这里的成员变量,是刚刚被初始化的成员变量?
希望得到高手的点拨!!
谢谢高手!! 展开
高手,小弟用线程类定义了一个线程对象,跑起来。
小弟再次用线程类定义了第二个线程对象,跑起来。
小弟希望高手点拨:
如果小弟用第一个线程对象修改了线程类中的一个成员变量的值,当小弟再次拿第二个线程对象来面对前面的线程类中的成员变量时,小弟应该认为:这里的成员变量的值,是被第一个线程对象修改后的值? 还是这里的成员变量,是刚刚被初始化的成员变量?
希望得到高手的点拨!!
谢谢高手!! 展开
2个回答
展开全部
这要看你这两个线程使用是不是同一个对象,我写个例子,你仔细看一下
public class Test {
class MyThreads implements Runnable{
private int flag = 0;
public MyThreads(){
}
@Override
public void run() {
System.out.println("flag = " + (++flag));
}
}
public Test(){
System.out.println("两条线程同用一个对象");
MyThreads myThread = new MyThreads();
new Thread(myThread).start();
new Thread(myThread).start();
}
public Test(int i){
System.out.println("两条线程使用不同对象");
MyThreads myThread = new MyThreads();
new Thread(myThread).start();
MyThreads myThread2 = new MyThreads();
new Thread(myThread2).start();
}
public static void main(String[] args) {
Test t = new Test();
try {
//线程输出太快,先暂停一会
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Test t2 = new Test(1);
}
}
2016-12-15
展开全部
可以共用,但要加锁
~~~~~~
~~~~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询