解析
代码
package com.example.testthread;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private int count =0;
TextView countText ;
private static final int UPDATE_COUNT = 1;
// private static final int THREAD2_UPDATE = 2;
// new两Hander
private Handler handler1 = new Handler(){
// 重写方法
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
// msg.what指明message的id
switch(msg.what){
case UPDATE_COUNT:
// msg.arg1:传递的数据整数
countText.setText("线程1:arg1:"+msg.arg1+",count:"+count+",arg2:"+msg.arg2);
break;
default:
break;
}
}
};
private Handler handler2 = new Handler(){
// 重写方法
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
// msg.what指明message的id
switch(msg.what){
case UPDATE_COUNT:
// msg.arg1:传递的数据整数
countText.setText("线程2:arg1:"+msg.arg1+",count:"+count+",arg2:"+msg.arg2);
break;
default:
break;
}
}
};
//加锁
synchronized public void updateCount() {
count ++;
// Log.d("updateCount","updateCount:"+count);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 线程1
new Thread(
new Runnable() {
@Override
public void run() {
for (int i=0;i<10000;i++){
updateCount();
}
// 在现在的ui运行
/*
runOnUiThread(new Runnable() {
@Override
public void run() {
countText.setText("线程1:"+count);
}
});
*/
Message msg = new Message();
msg.what = UPDATE_COUNT;
msg.arg1 = 11;
msg.arg2 = 12;
// 发送消息,谁发的,谁处理
handler1.sendMessage(msg);
}
}
).start();
// 线程2
new Thread(
new Runnable() {
@Override
public void run() {
for (int i=0;i<10000;i++){
updateCount();
}
/*
runOnUiThread(new Runnable() {
@Override
public void run() {
countText.setText("线程2:"+count);
}
});
*/
Message msg = new Message();
msg.what = UPDATE_COUNT;
msg.arg1 = 21;
msg.arg2 = 22;
// 发送消息
handler2.sendMessage(msg);
}
}
).start();
countText = findViewById(R.id.count_text);
}
}