java在线程中定义全局变量_java全局变量在线程中应用

在Java中,全局变量在不同线程间可能存在并发问题。此博客通过一个例子展示了如何在主线程和子线程中操作全局变量,讨论了线程执行顺序的不确定性导致的输出12或22的情况。线程安全问题需要谨慎处理,以防止程序出现意外行为。
摘要由CSDN通过智能技术生成

package com.example.testglobal;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.TextView;

public class MainActivity extends Activity {

TextView textView;

int a=0;

int b;

NewThread newThread;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView=(TextView)findViewById(R.id.text1);

a=12;

newThread=new NewThread();

newThread.start();

Log.e("dfs", "after Thread");

textView.append(""+a);

//测试while中全局变量变化

Log.e("fdsa", "before while b--->"+b);

while(true){

b++;

Log.e("fdsa", "b-->"+b);

if (b>5) {

break;

}

}

Log.e("fdsa","after while b--->"+b);

}

class NewThread extends Thread{//测试在另外类中全局变量的变化

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

a+=10;

Log.e("fda", "in the Thread a --->"+a);

}

}

}

打印结果:

0818b9ca8b590ca3270a3433284dd417.png

问题:

为什么有时手机打印12,有时又打印22:?

从图片上可以看出:打印12时,是先显示“after Thread”也就是说线程在textView.append(""+a);之后才执行的,测试线程还为执行,所以打印12。当然打印22时是在线程执行之后得到结果赋给了全局变量。在程序中我们使用线程时因为它处理比较耗时的操作,Activity也不能等着处理(如果放在主程序中则会显示程序长时间无响应,会被关闭),用的时候要注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值