class Program
{
static Barrier barrier = new Barrier(2, b => Console.WriteLine("End of phase {0}", b.CurrentPhaseNumber + 1));
static void PalyMusic(string name, string message, int second)
{
for (var i = 1; i <= 3; i++)
{
Console.WriteLine("----------------------------------");
Thread.Sleep(TimeSpan.FromSeconds(second));
Console.WriteLine("{0} Start to {1}", name, message);
Thread.Sleep(TimeSpan.FromSeconds(second));
Console.WriteLine("{0} finisheds to {1}", name, message);
barrier.SignalAndWait();
}
}
static void Main()
{
var t1 = new Thread(() => PalyMusic("the guitarist", "paly an amzaing solo", 5));
var t2 = new Thread(() => PalyMusic("the singer", "sing his song", 2));
t1.Start();
t2.Start();
}
}
多线程14-Barrier
时间: 2024-10-12 00:47:43
多线程14-Barrier的相关文章
Java多线程14:生产者/消费者模型
什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制.生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: 1.生产者生产的时候消费者不能消费 2.消费者消费的时候生产者不能生产 3.缓冲区空时消费者不能消费 4.缓冲区满时生产者不能生产 生产者/模型作为一种重要的模型,它的优点在于: 1.解耦.因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这一点很容易想到,这样生产者和消费者的代码发生变化,
多线程 - CyclicBarrier
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用.因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier. CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次.若在继续所有参与线程之前更新共享状态,此
java多线程15 :wait()和notify() 的生产者/消费者模式
什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制.生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: 1.生产者生产的时候消费者不能消费 2.消费者消费的时候生产者不能生产 3.缓冲区空时消费者不能消费 4.缓冲区满时生产者不能生产 生产者/模型作为一种重要的模型,它的优点在于: 1.解耦.因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这一点很容易想到,这样生产者和消费者的代码发生变化,
MySQL redo lock 死锁问题排查 &; 解决过程
版权声明:本文由 MySQL redo lock 死锁问题排查 & 解决过程 张青林 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/181 来源:腾云阁 https://www.qcloud.com/community 周一上班,首先向同事了解了一下上周的测试情况,被告知在多实例场景下 MySQL Server hang 住,无法测试下去,原生版本不存在这个问题,而新版本上出现了这个问题,不禁心头一颤,心中不禁感到奇怪
一个简单的线程池程序设计(消费者和生产者)
最近在学习linux下的编程,刚开始接触感觉有点复杂,今天把线程里比较重要的线程池程序重新理解梳理一下. 实现功能:创建一个线程池,该线程池包含若干个线程,以及一个任务队列,当有新的任务出现时,如果任务队列不满,则把该任务加入到任务队列中去,并且向线程发送一个信号,调用某个线程为任务队列中的任务服务.如果线程池中的线程都在忙,那么任务队列中的任务则等待.本程序较为简单,把任务定义为了两个数相加,输出它们的和. 采用自顶向下的设计方法,先把整体框架构建出来,然后再慢慢把细节,小模块补全. 1.在l
Socket网络编程--简单Web服务器(2)
上一小节通过阅读开源的Web服务器--tinyhttpd.大概知道了一次交互的请求信息和应答信息的具体过程.接下来我就自己简单的实现一个Web服务器. 下面这个程序只是实现一个简单的框架出来.这次先实现能够Accept客户端的请求. 简单创建web服务器 webserver.h 1 #include <iostream> 2 #include <string> 3 #include <string.h> 4 #include <stdio.h> 5 #inc
嵌入式试题
1. 以下三条输出语句分别输出什么? char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc"; const char* str6 = "abc"; cout << boolalpha <
10、CyclicBarrier
java.util.concurrent Class CyclicBarrier 使得一系列的线程相互等待,直到全部线程都到达一个公共的屏障点.这个屏障之所以称为Cyclic(循环的),是因为它能够在等待线程释放后重复使用. CyclicBarrier支持一个可选Runnable的参数,在每个屏障点运行一次(只有当所有的线程都到达时,才会执行). 1 class Solver { 2 final int N; 3 final float[][] data; 4 final CyclicBarri
Linux C 一个简单的线程池程序设计
实现功能:创建一个线程池,该线程池包含若干个线程,以及一个任务队列,当有新的任务出现时,如果任务队列不满,则把该任务加入到任务队列中去,并且向线程发送一个信号,调用某个线程为任务队列中的任务服务.如果线程池中的线程都在忙,那么任务队列中的任务则等待.本程序较为简单,把任务定义为了两个数相加,输出它们的和. 采用自顶向下的设计方法,先把整体框架构建出来,然后再慢慢把细节,小模块补全. 1.在linux环境下构建三个文件夹(include,src,bin) include:包含该程序所需要的头文件.
基础面试题
这里主要记录下以前遇到的面试题以及在网上看到的面试题. 1.Object类的方法 2.MySQL的事务 3.死锁 4.介绍线程 5.手写单例模式.工厂模式 6.手写你认为最快的排序方法 7.线程池的实现 8.equeus和hashcode的区别,只实现其中之一 有什么影响 9.mysql的索引类型,怎么优化索引 10.介绍HashMap以及原理,hashMap两个key冲突了怎么办 11.怎么在java中试下消费者和生产者 12.volatile的特性 13.线程有哪些状态,怎么实现多线程 14