多线程同步的巧用
2016-03-25 15:25
375 查看
博客转移到个人站点:
http://www.wangchengmeng.club/2018/02/04/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E7%9A%84%E5%B7%A7%E7%94%A8/
欢迎来吐槽
http://www.wangchengmeng.club/2018/02/04/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E7%9A%84%E5%B7%A7%E7%94%A8/
欢迎来吐槽
多线程
Semaphore的运用
introduce:Semaphore是java1.5并发库中关于多线程同步的一个类,可以在实例化对象的时候规定每次允许 线程执行的个数,然后每次执行都只能按照规定的个数线程去执行,当一个线程执行完毕后,外面的线程才能进去一个执行。 code: @Override public void run() { try { //获取到执行的锁 mSemaphore.acquire(); //中间只能有规定(实例化semaphore的时候传入参数)个数的线程同时执行,执行完毕一个,就进去一个 Log.d("aaa", "第" + this.mCount + "线程进来了"); SystemClock.sleep(3000); Log.d("aaa","第" + this.mCount + "线程出去了"); } catch (InterruptedException e) { e.printStackTrace(); } //释放掉锁 mSemaphore.release(); }
CyclicBarrier的运用
introduce:CyclicBarrier是在多线程的情况下,使线程出于等待状态,在实例化对象的时候传入一个int参数,是规定在等到了多少个线程都到达了的时候就一起进去执行,否则就等待 code: @Override public void run() { try { Log.d("aaa", "第"+mCount+"个线程已经到了"); //mCyclicBarrier = new CyclicBarrier(3); 等待满了三个线程就执行下去 否则就等待 mCyclicBarrier.await(); SystemClock.sleep(3000); Log.d("aaa", "第" + mCount + "个线程已经执行完毕"); } catch (Exception e) { e.printStackTrace(); } }
阻塞队列 BlockQueue
ArrayBlockQueue queue = new ArrayBlockQueue(1); 也就是初始化 一个容量为1的队列 queue.put(2); 放入了一个元素 ,再继续放入元素 就会阻塞 一直到可以放入元素再执行 queue.take(); 取出一个元素 当没有元素 就阻塞 一直到有元素再执行
线程中的一个小知识(重要)
eg: new Thread(new Runnable(){ public void run(){ System.out.println("Runnable"); } }){ public void run(){ system.out.println("Thread"); } }.start(); 仔细分析 一下这段代码,然后分析出打印的结果 首先是创建了一个Thread的匿名子类对象并实现了其父类的方法,其次传入了一个Runnable的匿名子类对象并实现了接口的方法。 注意:当我们在开启线程并传入Runnbale子类对象的时候,之所以去执行Runnbale中的run方法,是因为Thread这个类中的run方法指定了去执行Runnbale中的run方法,在这里已经覆盖了Thread中的run方法,并且没有去指定执行Runnbale中的run方法,所以在这里打印出 “Thread”
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序