当前位置: 技术问答>java相关
困惑:子线程如何使用主线程的变量?
来源: 互联网 发布时间:2015-01-29
本文导语: 有人说通过参数传递: public class AddURLThread extends Thread { private boolean flag = true; Vector vFile = null; URLList Newu=null; public AddURLThread(URLList Oldu) { Newu=Oldu; } 。。。 要在run方法使用u就必须定...
有人说通过参数传递:
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是同一个,该如何??
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是同一个,该如何??
|
发现主线程的Oldu改变了,线程里面的Newu依然不变。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
再确认一下.
要在run方法使用u就必须定义Newu出来
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不用,直接用主线程的u,只要u对你是可见的,但操作的方法必须是synchronized的,因为这是一个临界资源.如果v是vector等,那你就不用synchronized这么麻烦了,它的add,remove都是synchronized的了.
用静态变量,不推荐,也完全没有必要.
再确认一下.
要在run方法使用u就必须定义Newu出来
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不用,直接用主线程的u,只要u对你是可见的,但操作的方法必须是synchronized的,因为这是一个临界资源.如果v是vector等,那你就不用synchronized这么麻烦了,它的add,remove都是synchronized的了.
用静态变量,不推荐,也完全没有必要.
|
只有两个方法
1、用静态变量
2、使用同步
1、用静态变量
2、使用同步
|
好像有一个什么vocated(我记不得了)之类的修饰符的,否则jvm可能并不保证多线程的时候不同的线程访问的同一个对象真的是同一个对象(有可能为了提高效率,有的jvm会给不同的线程建同一个对象的不同内存拷贝)