博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程androidAndroid ConditionVariable的用法
阅读量:5239 次
发布时间:2019-06-14

本文共 2423 字,大约阅读时间需要 8 分钟。

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

      在Android开辟中,如果需要线程同步,可以使用Java系统库的wait()和notify()...但是这些代码的编写比拟麻烦。Android提供了一个ConditionVariable类便利线程同步操作。

      ConditionVariable有三个方法,分别是block()、open()、close()。

      void block()

  阻塞当前线程,直到条件为open
  void block(long timeout)
  阻塞当前线程,直到条件为open或超时
  void open()
  释放全部阻塞的线程
  void close()
  将条件重置为close

    

      ConditionVariable 在创立时还有一种构造方法是 public ConditionVariable (boolean state) ,如果为true,默许时为opened,如果为false则是closed. ,默许public ConditionVariable()为closed.

    

      自己简单写了一个Demo,效果有点牵强...Demo的效果是,TextView每过3秒,就会输出一个字符s。如果点击按钮可以马上输出。

    

    每日一道理
人生是洁白的画纸,我们每个人就是手握各色笔的画师;人生也是一条看不到尽头的长路,我们每个人则是人生道路的远足者;人生还像是一块神奇的土地,我们每个人则是手握农具的耕耘者;但人生更像一本难懂的书,我们每个人则是孜孜不倦的读书郎。
public class MainActivity extends Activity implements OnClickListener {	private Button btn_output;	private TextView textView;	private MyHandler mHandler;	private boolean isStart;	private String str = "";	private ConditionVariable mConditionVariable;	private final int REFRESHTEXT = 1;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		btn_output = (Button) findViewById(R.id.btn);		btn_output.setOnClickListener(this);		textView = (TextView) findViewById(R.id.txt);		mHandler = new MyHandler();		mConditionVariable = new ConditionVariable();		isStart = true;		new Thread(new Runnable() {			@Override			public void run() {				// TODO Auto-generated method stub				while(isStart) {					//延时等待3秒					mConditionVariable.block(3000);					//如果是点击了按钮,则先将条件重置,否则block会失效					mConditionVariable.close();					//线程唤醒后通知主线程更新TextView的文本					mHandler.sendEmptyMessage(REFRESHTEXT);				}			}		}).start();	}	private class MyHandler extends Handler {		public void handleMessage(Message msg) {			switch(msg.what) {			case REFRESHTEXT:				textView.setText(str += 's');				break;			}		}	}		@Override	public void onClick(View v) {		// TODO Auto-generated method stub		mConditionVariable.open();	}	@Override	protected void onDestroy() {		// TODO Auto-generated method stub		super.onDestroy();		isStart = false;	}}

    

文章结束给大家分享下程序员的一些笑话语录: 人工智能今天的发展水平:8乘8的国际象棋盘其实是一个体现思维与创意的强大媒介。象棋里蕴含了天文数字般的变化。卡斯帕罗夫指出,国际象棋的合法棋步共有1040。在棋局里每算度八步棋,里面蕴含的变化就已经超过银河系里的繁星总数。而地球上很少有任何数量达到这个级别。在金融危机之前,全世界的财富总和大约是1014人民币,而地球人口只有1010。棋盘上,所有可能的棋局总数达到10120,这超过了宇宙里所有原子的总数!经典语录网

--------------------------------- 原创文章 By

线程和android
---------------------------------

转载于:https://www.cnblogs.com/jiangu66/p/3153498.html

你可能感兴趣的文章
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
全连接神经网络(DNN)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
React Router 4.0 基本使用
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
CDN 学习笔记
查看>>
电子眼抓拍大解密
查看>>
多线程---线程间的通信
查看>>
poj 1331 Multiply
查看>>
严重: 文档无效: 找不到语法。 at (null:2:19)
查看>>