当前位置: 首页 > news >正文

企业网站建设源码HTML清溪镇网站建设

企业网站建设源码HTML,清溪镇网站建设,网站群建设目标,企业建设门户网站的需求Android ConditionVariable 线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个ConditionVariable类,用于线程同步。提供了三个方法block()、open()、close()。 void block() //阻塞当前线程,直到条件为…

Android ConditionVariable

线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个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.

源码

其实很好理解

private volatile boolean mCondition;

成员内部变量。

//默认构造函数public ConditionVariable()
{mCondition = false;
}
public ConditionVariable(boolean state)
{mCondition = state;
}

open,释放阻塞,即notifyAll一下,此时成员变量变为true。

public void open(){synchronized (this) {boolean old = mCondition;mCondition = true;if (!old) {this.notifyAll();}}
}

close,重置成员变量为false

public void close(){synchronized (this) {mCondition = false;}
}

block,只有在成员变量为false的时候进行wait等待

public void block(){synchronized (this) {while (!mCondition) {try {this.wait();}catch (InterruptedException e) {}}}
}
public boolean block(long timeout){// Object.wait(0) means wait forever, to mimic this, we just// call the other block() method in that case.  It simplifies// this code for the common case.if (timeout != 0) {synchronized (this) {long now = System.currentTimeMillis();long end = now + timeout;while (!mCondition && now < end) {try {this.wait(end-now);}catch (InterruptedException e) {}now = System.currentTimeMillis();}return mCondition;}} else {this.block();return true;}
}

实例

简单的延时:

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;@Overrideprotected 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() {@Overridepublic void run() {// TODO Auto-generated method stubwhile(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;}}}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmConditionVariable.open();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();isStart = false;}
}

实例2

尽管现在诞生的高级语言里边有了什么STM,协程,绿程的概念,但写代码总会遇到现实(商业级平台都不会用很新的东西)的多线程的问题。

比如有时候你需要同步的获取在另一个线程执行的代码的结果,在android里这种场景下ConditionVariable就非常好用了。

if (Looper.myLooper() != Looper.getMainLooper()) {final ConditionVariable completed = new ConditionVariable(); // 构造一个条件变量view.runOnUiThread(new Runnable() {@Overridepublic void run() {try {doSomeThingInUiThread(); // 将期望在另外线程做的事post出去} finally { // finally很重要,防止运行时异常远跳转将ConditionVariable忘了opencompleted.open(); // 事情办完了,notify到另外线程}}
});completed.block(TIMEOUT_WAIT_UI); // 等着另外线程做的事完成,同时支持设置超时
} else {doSomeThingInUiThread();
}

当然了以上是很简单的一个场景,使用ConditionVariable非常方便且够用。对于复杂的多线程之间的协同还是使用标准的条件变量结合lock + while 循环检查。

在一些新语言中有非常丰富的并发编程原语(future, delay, promise),特别是协程让我们用代码自主的确定代码流之间的协作关系而不是被动的作为OS调度器的奴隶,来支撑一些并行需求。

参考链接:https://www.jianshu.com/p/c03aa7bf3ebf
https://www.cnblogs.com/yydcdut/p/4273526.html
https://developer.aliyun.com/article/24161

http://www.yayakq.cn/news/451890/

相关文章:

  • 定制网站建设和运营2018什么做网站
  • 建个人网站做导购夜晚必备直播软件
  • 赤峰市做网站公司适合中小企业的管理软件
  • 昆明网站开发建如何注册网站免费的吗
  • 网站广告位设计网站建设栏目管理
  • php网站下载器河南建筑材料价格信息网
  • 网站备案需要多少天建阳建设局网站
  • 哪些安防公司做了手机网站软件技术专业课程
  • seo整站优化外包哪家好wordpress gif 点击播放
  • 电子外贸网站html代码模板免费
  • 站长工具官网查询东莞创意网站设计效果图
  • 网站优化方案教程怎么制作网站游戏
  • e4a怎么做点击跳转网站自动生成作文网站
  • 天津建设教育培训中心网站公司网站免备案
  • 做网站用什么颜色好网上购物英语作文
  • 网站关键词整体方案门户网站建设大概多少钱
  • 做网站下载好素材之后怎么建造主页视频.wordpress添加ssl
  • 廉江市住房和城乡规划建设局网站thecontent WordPress
  • 网站后台word编辑器青岛微网站
  • 平面设计欣赏网站推荐企业管理系统是什么意思
  • 网站建设定制开发服务网站目录怎么做的
  • 外贸网站定制开发购物网站设计欣赏
  • 企业门户网站的主要技术指标天津大型网站建设风格
  • 都匀网站开发网页和网站做哪个好用
  • 旅游网站开发意义和背景服务公司商标
  • 珠海网站定制开发查商标官网
  • 企业网站模板大全wordpress内页长尾词排名
  • 做电影平台网站怎么赚钱吗wordpress分类页首页调用分类描述
  • wordpress中视频教程常州网络推广seo
  • 加氢站个公司好我的世界外国做图网站