
java多线程问题
多个线程调用同一个对象的同一个方法没有任何更改全局变量的步骤请问方法里面产生的局部变量也会有线程安全问题吗...
多个线程调用同一个对象的同一个方法 没有任何更改全局变量的步骤 请问方法里面产生的局部变量也会有线程安全问题吗
展开
3个回答
展开全部
存在栈里面的数据肯定是线程安全的,像方法中定义的int, short, long, byte, float, double, boolean, char,String等不存在线程安全问题。
如果存在堆中则令当别论。
因为堆中存放对象,方法中根据引用来调用这些对象。如果这个方法产生的对象把引用给了多个线程,则会存在线程安全的问题。像 单例模式。
但如果仅仅在方法中自行生成,比如方法中有person person=new person();
这个方法每执行一次,则会重新创建一个对象在堆中,则不存在线程安全问题
如果存在堆中则令当别论。
因为堆中存放对象,方法中根据引用来调用这些对象。如果这个方法产生的对象把引用给了多个线程,则会存在线程安全的问题。像 单例模式。
但如果仅仅在方法中自行生成,比如方法中有person person=new person();
这个方法每执行一次,则会重新创建一个对象在堆中,则不存在线程安全问题
展开全部
没有,因为每个线程都有一个栈空间,而方法中的局部变量是存在线程的栈空间的,所以多个线程不会有印象.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
bu hui.
你可以再你的方法里面加上
你可以通过测试以下方法看看
public void method(int j){
int i=j;
try{
System.out.println("i="+i);
Thread.sleep(500);
System.out.println("i="+i);
}catch(Exception ex){
}
}
在你生成的线程中,你可以让两个线程在调用start()方法之间的时间,sleep(200);
也就是说:
try{当然了,你要自己在run方法里面调用我上面的method方法
MyThread t1=new MyThread();
new Thread(t1).start();
Thread.sleep(200);
MyThread t2=new MyThread();
new Thread(t2).start();
}catch(Exception ex){
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |