《黑马程序员》 使用阻塞队列实现同步通知
来源:互联网 发布:云购开奖计算公式 编辑:程序博客网 时间:2024/04/19 13:52
public class BlockQueueCommuncationTest {/**用两个具有1个空间的队列来实现同步通知的功能。子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次,请写出程序。 * 我们先来实现这样的效果: 先实现2个线程都执行语句。 一个线程在执行的时候其它的线程不会去打断他的执行。 * 我们没有使用互斥。主线程在执行的时候,还没有执行完就被子线程给打断了 */public static void main(String[] args) {final Business busi = new Business();// 子线程new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 50; i++) {busi.sub(i); // 调用相关联的类身上的方法}}}).start();// 主线程for (int i = 1; i <= 50; i++) {busi.main(i); // 调用相关联的类身上的方法}}}class Business {//我们要使用阻塞队列的形式来实现主线程和子线程之间的通信//让子线程先执行。就意味着主线程默认是阻塞的状态。//阻塞队列时:队列处于full时,若再执行put方法,执行该操作的线程会进行阻塞,//阻塞队列时:队列处于empty时,若再执行empty方法,执行该操作的线程会进行阻塞,private BlockingQueue<Integer> main=new ArrayBlockingQueue<Integer>(1); //里面只有一个元素. private BlockingQueue<Integer> sub=new ArrayBlockingQueue<Integer>(1); //里面只有一个元素.//既然是想让主线程处于阻塞。我们就要默认给main队列添加一个数据//这样在main方法中再添加的时候它就处于阻塞了{ //可能没有人看到过这种形式//其实这种形式是匿名构造方法。它是优先于所有的构造方法之前调用。在构造方法调用之前。匿名构造方法是//要先调用的。构造方法调用几次,匿名构造方法就调用几次。我们的static它是随着类的加载而加载。而且//只会执行一次。try {main.put(1);} catch (InterruptedException e) {e.printStackTrace();} }public void sub(int i) {try {sub.put(i); //子线程执行数据。如果队列为满的。它就会进行阻塞for (int j = 1; j <= 10; j++) {System.out.println("sub thread sequence of:" + j + ",loop of:"+ i);}main.take(); //通知主线程执行取数据} catch (Exception e) {// TODO: handle exception}}public synchronized void main(int i) {try {main.put(1); //因为我们默认为当前的队列添加了数据。所以当前集合是满的。这里在第一次的时候会进入阻塞。for (int j = 1; j <= 100; j++) {System.out.println("main thread sequence of:" + j + ",loop of:"+ i);}sub.take(); //通知子线程取数据} catch (Exception e) {// TODO: handle exception}}}
0 0
- 《黑马程序员》 使用阻塞队列实现同步通知
- 黑马程序员-阻塞队列
- 黑马程序员-阻塞队列
- 黑马程序员---用可阻塞队列实现两…
- 黑马程序员---用阻塞队列实现三个…
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- Java使用阻塞队列BlockingQueue实现线程同步
- 黑马程序员——Java多线程—线程同步—阻塞队列:BlockingQueue
- 黑马程序员--BlockingQueue(可阻塞的队列)
- 黑马程序员-java-condition-实现线程通信和可阻塞队列
- Posix消息队列使用非阻塞mq_receive的信号通知
- Linux C++ 使用condition实现阻塞队列
- 使用C++ 11 实现阻塞队列
- java 使用ReentrantLock Condition实现阻塞队列
- Linux C++ 使用condition实现阻塞队列
- 使用阻塞队列BlockingQueue实现生产者消费者
- 使用数组简单实现的阻塞队列
- 使用java来实现阻塞队列
- LCD的接口类型详解
- visual studio 自动排版快捷键
- JAVA的字符串拼接与性能
- TS
- Myeclipse8.5中svn插件安装方法总结
- 《黑马程序员》 使用阻塞队列实现同步通知
- FLV
- NVD3.js 中 图例 (legend) 中文字符 被图标遮住
- 智利地震威海地震尼玛又地震 地球最近很闹腾!
- 用科学方法研究工作生活平衡
- SharePoint Ribbon菜单ID总结
- C++编译器越界检查机制
- 自己创建sessionFactory与用spring中提供的sessionFactory的不同
- Android中通过pid获取app包名