请教Java 多线程高手一个简单的“线程对象是否共用线程类的成员变量”的问题。 20

高手,小弟在这里做一下细节阐述:高手,小弟用线程类定义了一个线程对象,跑起来。小弟再次用线程类定义了第二个线程对象,跑起来。小弟希望高手点拨:如果小弟用第一个线程对象修改... 高手,小弟在这里做一下细节阐述:
高手,小弟用线程类定义了一个线程对象,跑起来。
小弟再次用线程类定义了第二个线程对象,跑起来。
小弟希望高手点拨:
如果小弟用第一个线程对象修改了线程类中的一个成员变量的值,当小弟再次拿第二个线程对象来面对前面的线程类中的成员变量时,小弟应该认为:这里的成员变量的值,是被第一个线程对象修改后的值? 还是这里的成员变量,是刚刚被初始化的成员变量?
希望得到高手的点拨!!
谢谢高手!!
展开
 我来答
胡研乱语
推荐于2017-10-06 · TA获得超过382个赞
知道小有建树答主
回答量:262
采纳率:0%
帮助的人:218万
展开全部

 这要看你这两个线程使用是不是同一个对象,我写个例子,你仔细看一下

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
展开全部
可以共用,但要加锁

~~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式