互斥机制synchronized学习
/*** 互斥机制学习* @author 蒙查查* @date 2013-4-9* **/
package com.test.sync;import java.util.LinkedList;import com.test.R;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SlidingDrawer;public class MainActivity extends Activity{Integer mutex = new Integer(-1); //互斥信号LinkedList<String> list = new LinkedList<String>(); //模拟临界区Button btn1, btn2;boolean keepRun = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);btn1 = (Button) findViewById(R.id.btn1);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubkeepRun = true;new Thread(new Productor()).start();new Thread(new CustomerThread()).start();}});btn2 = (Button) findViewById(R.id.btn2);btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubkeepRun = false;}});}/*** 模拟生产者* */class Productor implements Runnable {@Overridepublic void run() {// TODO Auto-generated method stubwhile(keepRun) {Log.i("Productor==", "");try {synchronized(mutex) {Log.i("Productor==", "i get a lock");if(list.size() > 10) {//调用notify之后退出了synchronized块,即立刻释放了锁,wait()处将被唤醒mutex.notify();}else {double add = Math.random();Log.i("Productor==", "add " + add);list.add("" + add);Thread.sleep(500);}}} catch(Exception e) {e.printStackTrace();}}}}/*** 模拟消费者* */class CustomerThread implements Runnable {@Overridepublic void run() {// TODO Auto-generated method stubwhile(keepRun) {Log.i("CustomerThread--","");synchronized(mutex) {Log.i("CustomerThread--","i get a lock");try {if(list.size() <= 0){ //当资源不足,消费者在等待,mutex.wait()让出CPU的使用权,并且释放了锁,当某处调用了mutex.notify()这里将被唤醒mutex.wait();}else {Log.i("CustomerThread--", ""+list.removeFirst());}} catch(Exception e) {e.printStackTrace();}}}}}
}/*** PS:* wait()、notify()、notifyall()只能在synchronized块或方法中被调用,否则会抛异常。* wait()不仅是让出了CPU的使用权,而且把持有的锁释放了。* 分析上面的java代码:在调用mutex.wait()之前的若干步我们锁住了mutex;调用mutex.wait()让出CPU的使用权,并且释放了锁;* 调用mutex.notify()之前先获得mutex上的锁,调用notify之后退出了synchronized块,即立刻释放了锁;这时wait()被唤醒,* 它首先获得mutex上的锁,再执行下面的语句。* */
互斥机制synchronized学习相关推荐
- Java 并发编程—有锁互斥机制及AQS理论
原文作者:Java并发编程 原文地址:AQS这样学就很简单了 目录 一.有锁互斥机制 二.AQS如何实现互斥 三.结语 如果你是道格李,你要实现一套机制来保证线程互斥,你会如何实现呢?你肯定不会一上来 ...
- 线程同步机制synchronized中锁的判断以及锁的作用范围
当我们使用多个线程访问同一资源(可以是同一个变量.同一个文件.同一条记录等)的时候,若多个线程只有读操作,那么不会发生线程安全问题,但是如果多个线程中对资源有读和写的操作,就容易出现线程安全问题. 要 ...
- 今天在群里面讨论了驱动机制的学习
今天在群里面讨论了驱动机制的学习,收获挺大的,在此总结一下与大家分享.错误之处请批评指正. 在驱动接触过程中,是以内存字符设备驱动作为敲门砖的,学习了驱动程序的基本框架,各种设备方法,可是内存设备毕竟 ...
- ACL 2021 | 基于全局字符关联机制联邦学习的中文分词
作者 | 陈桂敏 来源 | QTrade AI研究中心 QTrade AI 研究中心是一支将近 30 人的团队,主要研究方向包括:预训练模型.信息抽取.对话机器人.内容推荐等.本文介绍的是一篇收录于 ...
- 线程同步互斥机制--互斥锁
目录 前言 一.互斥锁是什么? 二.互斥锁的使用 三.代码实现过程 1.初始化互斥锁 2.互斥锁上锁 3.互斥锁解锁 4.互斥锁释放 5.代码示例 四.死锁 前言 线程通信只需要操作共享的进程数据段即 ...
- linux 互斥机制
linux 互斥机制 之前一直不能理解各种互斥机制的优劣,完整的看了<Linux设备驱动开发详解:基于最新的Linux4.0内核>这书第7章后,才彻底的搞懂了 linux 系统中的互斥机制 ...
- Java反射机制再学习
Java反射机制的学习 Java反射机制的学习 转自:http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html 总结的很到位,记录下 ...
- Java反射机制的学习(3)
Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调 ...
- 融合边界处理机制的学习型麻雀搜索算法
文章目录 一.理论基础 1.麻雀搜索算法 2.HSSA搜索算法 2.1 Piecewise map初始化种群 2.2 自适应警戒者策略 2.3 多策略学习机制 2.3.1 排序配对学习策略 2.3.2 ...
- python 按需加载_基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)...
基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 文档转换为PDF有些图片无法完全显示,请移步我的博客查看 完成 ...
最新文章
- Cucumber 入门一
- matlab最优控制实验报告_第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt...
- 用JS获取地址栏参数的方法
- springcloud 微服务鉴权_Java微服务框架spring cloud
- 面试题 08.09. 括号
- 华为服务器虚拟化断电,服务器断电日志查看
- Linux下如何查看高CPU占用率线程 专题
- 高质量PWM数字功放芯片
- PDF文件太大了,如何免费压缩变小?
- 动态规划——背包问题01背包
- HTML和web窗体的区别(转载)
- 2021苹果CMS安卓萝卜视频原生影视APP源码支持投屏选集倍速弹幕版(前端二开美化版)
- BroadCast Channel
- 计算机教室网络安全应急预案,校园网和计算机教室多媒体教室应急预案
- Beta冲刺-第一天
- 织梦全站自动关键词内链插件可指定关键词批量插入内链
- 8086如何计算物理地址
- [原创]Android x86开启houdini(arm兼容库) 手动安装houdini 支持arm app
- FPGA实验3:DAC FIFO实验
- 小说爬虫强制绕过ssl验证