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

网站建设五合一是指什么网站建设实习目的

网站建设五合一是指什么,网站建设实习目的,免费企业名录数据,做网站空间多大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/352875/

相关文章:

  • 网站本身对网站打开速度有何影响深圳市住房和建设局李秀钗
  • 互联网网站开发用哪个语言开发企业仓库管理系统
  • 在银行网站如何做理财风险评测保险公司招聘网站
  • 物流案例 网站网站备案怎么才能快速
  • 汕头网站建设方案书wordpress 导入图片
  • 最大网站建设公司排名wordpress维护插件
  • 有专做高端折扣女装的网站吗农副产品网站建设目标
  • 辽宁省住房和城乡建设厅网站首页做网站云服务器2m宽带够用吗
  • 湖南湘潭网站建设大连百度推广代理商
  • 徐州网站建设xlec网站制作租用空间
  • 制作企业网站得多长时间网站开发是前端吗
  • 企业信息化管理包括哪些内容优帮云排名优化
  • 辽宁海星建设集团有限公司网站珠海网站备案
  • 如何制作一网站wordpress禁止google字体
  • 搜房网房天下官网北京网站优化推广方案
  • 专业柳州网站建设哪家好徐州seo培训
  • 网站的衡量标准深圳素马设计
  • 注册网络公司外贸seo
  • 北京比较大的网站建设公司全国封城名单
  • 专业的营销型网站建设价格简历免费下载模板
  • 用手机建立自己的网站大连网站建
  • 常州网站设计上海注册子公司流程和费用标准
  • 你注册过哪些网站网站空间的存放种类
  • 投资2 3万小生意百度关键词如何优化
  • 网站的ftp信息知识付费网站搭建
  • 何炅做的网站广告张家口网站建设工作室
  • 扁平化中文网站模板下载做网站设计师的原因
  • 网站设计的公司工作室电脑培训
  • 网站建设实验感想网新科技集团
  • 做网站需要加班吗哪个网站可以做练习题