楼主 gdsean(摇滚 java )2001-08-30 14:50:32 在 Java / J2SE / 基础类 提问
有人说通过参数传递:
public class AddURLThread extends Thread {
private boolean flag = true;
Vector vFile = null;
URLList Newu=null;
public AddURLThread(URLList Oldu)
{
Newu=Oldu;
}
。。。
要在run方法使用u就必须定义Newu出来。那么线程对Newu的修改
不能影响到Oldu吗??
我发现主线程的Oldu改变了,线程里面的Newu依然不变。
我想让Oldu和Newu是同一个,该如何?? 问题点数:60、回复次数:5Top
1 楼9p(飞龙在天)回复于 2001-08-30 14:53:53 得分 10
只有两个方法
1、用静态变量
2、使用同步Top
2 楼beyondii(十万个为什么)回复于 2001-08-30 16:17:19 得分 0
同意
Top
3 楼tpProgramer(tp编程者)回复于 2001-08-30 17:44:29 得分 0
使用同步不错,即使是静态变量也要使用同步机制避免并发访问。Top
4 楼cming(白云蓝天)回复于 2001-08-30 18:22:03 得分 40
发现主线程的Oldu改变了,线程里面的Newu依然不变。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
再确认一下.
要在run方法使用u就必须定义Newu出来
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不用,直接用主线程的u,只要u对你是可见的,但操作的方法必须是synchronized的,因为这是一个临界资源.如果v是vector等,那你就不用synchronized这么麻烦了,它的add,remove都是synchronized的了.
用静态变量,不推荐,也完全没有必要.
Top
5 楼vive(白起)回复于 2001-08-30 20:35:10 得分 10
好像有一个什么vocated(我记不得了)之类的修饰符的,否则jvm可能并不保证多线程的时候不同的线程访问的同一个对象真的是同一个对象(有可能为了提高效率,有的jvm会给不同的线程建同一个对象的不同内存拷贝)
博主在Java多线程编程中遇到问题,子线程无法同步更新主线程的Vector对象。讨论中提出了通过静态变量或同步机制解决并发访问的问题,同时也建议直接使用主线程的变量并确保操作方法同步,以避免并发问题。有人提到了volatile关键字以确保多线程间对象的一致性。
191

被折叠的 条评论
为什么被折叠?



