温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

synchronized之线程安全

发布时间:2020-07-06 21:52:54 来源:网络 阅读:477 作者:671076656 栏目:开发技术

 一、当两个并发线程访问同一个对象object中的

这个synchronized(this)同步代码块时,

一个时间内只能有一个线程得到执行。

另一个线程必须等待当前线程执行完

这个代码块以后才能执行该代码块。 

@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity implements OnClickListener{
private Thread mThraed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mThraed = new Thread(mRunnable);
((Button)findViewById(R.id.button1)).setOnClickListener(this);
((Button)findViewById(R.id.button2)).setOnClickListener(this);
}
private Runnable mRunnable = new Runnable(){
@Override
public void run() {
/**
 * 线程安全
 * 对线程进行加锁处理
 * 线程内的数据处理完毕后,再开锁
 * */
synchronized(mHandler){
while(true){
if(mThraed == null){
break;
}
try{
Thread.sleep(1000);
mHandler.sendEmptyMessage(0x01);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
};
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 0x01:
refreshUI();
break;
default:
break;
}
}
};
private void refreshUI(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date = sdf.format(new Date());
Log.v("result",date);
((TextView)findViewById(R.id.textView1)).setText(date);
}
@Override
public void onClick(View arg0) {
if(arg0.getId() == R.id.button1){
if(mThraed == null){
mThraed = new Thread(mRunnable);
mThraed.start();
}else{
mThraed = new Thread(mRunnable);
mThraed.start();
}
}
if(arg0.getId() == R.id.button2){
mThraed = null;
}
}
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI