困惑:子线程如何使用主线程的变量?

博主在Java多线程编程中遇到问题,子线程无法同步更新主线程的Vector对象。讨论中提出了通过静态变量或同步机制解决并发访问的问题,同时也建议直接使用主线程的变量并确保操作方法同步,以避免并发问题。有人提到了volatile关键字以确保多线程间对象的一致性。

楼主 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

src="/Include/Board.htm?Tags=" frameborder="0" scrolling="no">

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会给不同的线程建同一个对象的不同内存拷贝) 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值