黑马程序员---Lock和Condition
来源:互联网 发布:淘宝联盟挣钱 编辑:程序博客网 时间:2024/06/07 21:57
---------------------- android培训、java培训、期待与您交流! ----------------------
感觉Lock和Condition比synchronized要好理解一点
说不定也是学完synchronized之后的感觉...
功能是强大许多
张老师说那个主线程子线程交替的面试题
还可以拓展一下 写成3个线程的
于是我就再拓展了一下
写了一个DoSomething类
可以传递3个参数
1.实现了Runnable的对象
2.线程数量
3.需要loop的次数
然后就会自动建立线程循环按顺序
调用Runnable对象的run方法
import java.util.concurrent.locks.*;class DoSomething{private boolean[] run=null;//记录各个线程可否运行的booleanprivate ReentrantLock lock=null;private Condition[] condition=null;//各个线程的conditionprivate Thread[] thread=null;//线程数组private int count=0;private int current=0;//当前线程的脚标号private Runnable task=null;private int loop=0;//剩余循环次数public DoSomething(Runnable task,int count,int loop){this.count=count;this.task=task;this.loop=loop;lock=new ReentrantLock();run=new boolean[count];condition=new Condition[count];thread=new Thread[count];for(int i=0;i<count;i++){condition[i]=lock.newCondition();run[i]=false;thread[i]=new Thread(new Task(i));}run[0]=true;//从第一个线程开始for(int i=0;i<count;i++)thread[i].start();}class Task implements Runnable{private int num;//记录线程的脚标号public Task(int num){this.num=num;}public void run(){while(loop-->0){lock.lock();while(!run[num]){try{condition[num].await();//线程对应的condition的await}catch(InterruptedException e){e.printStackTrace();}}System.out.println(Thread.currentThread().getName() +"start");task.run();System.out.println(Thread.currentThread().getName() +"end\r\n");run[current]=false;//当前线程等待if(++current==count)current=0;//下一个线程boolean设为true,唤醒run[current]=true;//condition[current].signal();//lock.unlock();}}}}class ConditionTest{public static void main(String[] args){new DoSomething(new something(),3,10);}static class something implements Runnable{public void run(){for(int i=0;i<20;i++)System.out.print(i+" ");System.out.println();}}}
详细请查看:http://edu.csdn.net/heima
- 黑马程序员---Lock和Condition
- 《黑马程序员》Lock&Condition练习
- 黑马程序员——Lock锁与Condition
- 黑马程序员-java5的线程锁技术Lock,Condition
- 黑马程序员——Java5中的线程并发库(一)---概述、线程池、Callable和Future、Lock和Condition
- lock和condition
- 黑马程序员 利用Lock Condition解决多生产者多消费者问题的实例
- 黑马程序员:线程间通信介绍:wait()、notify()、Lock、Condition等介绍
- java并发---lock和condition
- Lock-Condition
- Lock & Condition
- Lock、Condition
- Lock & condition
- Lock和Condition实现线程同步通信
- 多线程中使用Lock和Condition机制
- Lock和Condition实现线程同步通信
- Python的Lock和condition使用
- java Lock和Condition的用法
- 黑马程序员---移动用户资费系统
- innodb_flush_log_at_trx_commit 大大提高导入速度
- 黑马程序员---传统线程之间的同步通信
- Android入门:封装一个HTTP请求的辅助类
- http://home.cnblogs.com/wz/
- 黑马程序员---Lock和Condition
- 什么情况下应该建立索引,索引优化及分析
- Opcode 开源的碰撞检测库
- Ogre+Opcode实现碰撞检测
- seo分享之seo指令与技巧
- 黑马程序员---空中网面试题1
- C++ socket编程MFC CAsyncSocket
- 阮一峰:Git分支管理策略
- hibernate session 与 HttpSession 区别