内部类的子线程可以改变外部类的成员变量吗

mmmmayi 2017-08-27 03:04:59
新手小白想问大神们一个问题,像下面这个程序这样,

public class fragmentch4 extends Fragment {

private double [] bcgTemp=new double[7];

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
msgReceiver = new MsgReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.android.smartphone.SmartphoneSystemActivity");
getActivity().registerReceiver(msgReceiver, intentFilter);

}

public class MsgReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, final Intent intent) {

new Thread(new Runnable() {
@Override
public void run() {
double [] ddata=new double[4];

ddata=intent.getIntArrayExtra("4_ch_data");
Process(ddata);
}
}).start();
}

private void Process(double [] data)
{
int i=0;

bcgTemp[0]=(data[0]);
bcgTemp[1]=(data[1]);
bcgTemp[2]=(data[2]);
bcgTemp[3]=(data[3]);
bcgTemp[4]=bandpassRes(data[3]);
bcgTemp[5]=bandpass3(data[3]);
bcgTemp[6]=data_1_filtered;
plot(bcgTemp);
}
}


在类MsgReceiver中开了个子线程,并在子线程中给外部类 fragmentch4的成员变量bcgTemp赋值,当收到第二个广播时是不是此时使用的bcgTemp就已经被第一个子线程改动过了?也就是说bcgTemp算是一个临界资源吗?
...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
smwhotjay 2017-08-31
  • 打赏
  • 举报
回复
线程无关,只要访问作用域 能访问修改,都可以。但是,注意多线程同步那些
怀君 2017-08-28
  • 打赏
  • 举报
回复
做测试被,应该是可以的。
rayw0ng 2017-08-27
  • 打赏
  • 举报
回复
算是,而且如果收到广播的速度超过线程处理速度的话,可能出现多个线程同时修改 bcgTemp 的情况。最好还是同步一下,避免意外。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧