线程等待
来源:互联网 发布:cdn加速知乎 编辑:程序博客网 时间:2024/05/18 02:05
今天发现同事的一段代码,妈的,当时没看懂。后来一问才知道线程等待。
它使用的场景就是在一个方法里面,调用AlertDialog api弹出了一个对话框,让用户选择,必须选择完之后才往下进行。
也就是用户不操作,那么这个方法是不会return的。
代码:
private Calback mAccountChangeCallback = new Calback() { private Object mWaitLocker = new Object(); private boolean mConfim; @Override public boolean onBeforeAccountChange(String oldUserName, String newUserName) { if(TextUtils.isEmpty(oldUserName)) return true; if(oldUserName.equals(newUserName)) return true; BaseActivityHelper.hideProgressDialog(LoginActivity.this); //---请求用户确认 String msgFormat = getString(R.string.login_msg_switch_account); String msgString = String.format(msgFormat, newUserName); BaseActivityHelper.setDialogEventListener(LoginActivity.this,new ListenerDialogEvent() { @Override public void onEvent(int event, Object currObj, Object param, int index) { mConfim = currObj == null ? false : (Boolean) currObj; synchronized (mWaitLocker) { mWaitLocker.notifyAll(); } } }, null); Message msg = new Message(); String[] result = new String[]{getString(R.string.login_switch_account) , msgString}; msg.what = MSG.MSG_APP_SHOW_DIALOG_CUSTOM; msg.arg1 = R.array.alert_btn_d; msg.arg2 = 0; msg.obj = result; mHandler.sendMessage(msg); //---等待用户确认 synchronized (mWaitLocker) { try { mWaitLocker.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } return mConfim; } @Override public boolean onAfterAccountChange(String oldUserName, String newUserName) { return false; } };
1.private Object mWaitLocker = new Object();
2.主要是这个方法:onBeforeAccountChange
在return之前加了一个,等待用户去点击:
//---等待用户确认 synchronized (mWaitLocker) { try { mWaitLocker.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }
wait线程等待,这个方法就不返回,就不往下走了。
3.用户点击之后就会回调
@Override public void onEvent(int event, Object currObj, Object param, int index) { mConfim = currObj == null ? false : (Boolean) currObj; synchronized (mWaitLocker) { mWaitLocker.notifyAll(); } } }, null);
这时候通知所有这个加锁的线程去唤醒。
notifyAll()
注:
1.调试一定要一步一行的观察。
0 0
- 线程等待
- 线程等待
- 线程等待
- 线程等待
- 等待指定线程结束
- (三)线程--等待句柄
- 线程等待 WaitFor...
- 线程等待 WaitFor...
- WaitForSingleObject 等待线程句柄
- 等待线程结束
- 线程等待与唤醒
- 线程创建等待消除
- 等待窗口线程关闭
- 线程的等待
- 等待线程退出pthread_join
- 线程进入等待状态
- 线程的控制等待
- linux 线程等待队列
- JSP--设置性别是否被选中
- 矩阵求逆-Warning: Matrix is singular to working precision.
- 几何画板绘制三棱锥的方法
- Android5.0 FloatingActionButton使用小结
- Lua 学习笔记:沙盒
- 线程等待
- MATLAB常见函数(图像处理方面)
- Bullshit —— 第一期
- JS循环输出数组及数组键值
- 【c语言】scanf和getchar详解
- java 线程3 多线程的基本工作原理
- RDO1.4.7连接windows 2008出现的问题
- Playing Atari with Deep Reinforcement Learning
- mybatis批量插入