using System;
using System.Collections.Generic;
using System.Threading; namespace ConsoleApplication1
{
public static class Class1
{
static Queue<string> MsgQueue = new Queue<string>();
//创建一个没有其他用途的对象作为锁,微软官方推荐做法
private static Object thisLock = new Object(); static Class1()
{
ThreadPool.QueueUserWorkItem(q =>
{
while (true)
{
lock (thisLock)
{
if (MsgQueue.Count > )
{
string msg = MsgQueue.Dequeue();
//把内容记录起来之类的操作...
}
else
{
//队列中没有东西,就让线程休息下
Thread.Sleep();
}
}
}
});
} public static void Insert(string msg)
{
lock (thisLock)
{
MsgQueue.Enqueue(msg);
}
}
}
}

队列demo

Quartz.Net和队列结合控制台demo

 using Quartz;
using Quartz.Impl; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
for (int i = ; i <= ; i++)
{
TestJob.Insert($"str{i} ");
} //计划者
IScheduler sched = StdSchedulerFactory.GetDefaultScheduler();
//作业
IJobDetail job1 = new JobDetailImpl("Job1", "JobGroup1", typeof(TestJob));
//触发器
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("Trigger1", "TriggerGroup1")
.StartNow() //现在开始
.WithSimpleSchedule(x => x
.WithIntervalInSeconds() //5秒一次
.RepeatForever()) //不断重复
.Build(); ////存值
//job1.JobDataMap.Add("key1", "value1"); sched.ScheduleJob(job1, trigger1);
sched.Start();
         Console.Read();
}
}
}
 using Quartz;
using System;
using System.Collections.Generic;
using System.Threading; namespace ConsoleApplication1
{
public class TestJob : IJob //想成为作业就要实现此接口
{
static Queue<string> MsgQueue = new Queue<string>();
private static Object thisLock = new Object(); public static void Insert(string msg)
{
lock (thisLock)
{
MsgQueue.Enqueue(msg);
}
} public void Execute(IJobExecutionContext context)
{
lock (thisLock)
{
if (MsgQueue.Count > )
{
string msg = MsgQueue.Dequeue();
Console.WriteLine(msg + DateTime.Now.ToString());
}
else
{
//队列中没有东西,就让线程休息下
Thread.Sleep();
}
} ////取值
//JobDataMap dataMap = context.JobDetail.JobDataMap;
//string content = dataMap.GetString("key1");
//Console.WriteLine("作业执行,jobSays:" + content);
}
}
}

Quartz.Net和队列应用demo的更多相关文章

  1. lesson2:java阻塞队列的demo及源码分析

    本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多 ...

  2. java类中使用quartz,设置自动任务Demo

    package com.tech.jin.jobScheduler; import java.text.ParseException; import java.util.ArrayList; impo ...

  3. 消息队列 简单demo

    可以使用Windows自带计划任务执行Receive操作. 控制面板=>管理工具 计划任务 =>创建计划任务 step : http://www.2cto.com/kf/201402/27 ...

  4. Java Design Demo -简单的队列-异步多任务队列(java android)

    简单的单线程队列 -- 工作的时候遇到劣质打印机.给打印机发消息,打印机就会打印,如果在打印机还在打印的时候,就 再发消息打印,就会出现消息丢失.所以需要给上一个任务一些处理的间隔时间. 单线程的消息 ...

  5. 数据结构之循环队列Demo

    循环队列 比较简单,循环队列主要是判断队满.队空.有效元素个数 画图说明: 假设:队的长度为5(0-4) 但是实际maxsize为6,需要一个预留空间(不存储元素)做计算 继续添加3个元素后: 出队一 ...

  6. PHP的轻量消息队列php-resque使用说明

    日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. 消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要 ...

  7. 文件 FIFO队列

    <?php /** * Filefifo.php 文件型FIFO队列 */ class Filefifo { /** * $_file_data, 数据文件的路径 */ private $_fi ...

  8. PetShop 4.0学习笔记:消息队列MSMQ

    直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...

  9. CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件

    Java多线程编程是很考验一个程序猿水平的. 传统的WEB程序中.由于框架提供了太多的健壮性.并发性.可靠性的支持,所以我们都是将全部的注意力放到了业务实现上.我们不过依照业务逻辑的要求.不停的积累自 ...

随机推荐

  1. 用ubuntu里的vim搭建一个apache2+php+mysql环境一路踩的坑

    先是安装apache2,这个很顺利,一个apt install apache就搞定了. (PS:查看linux是否已经安装了apache服务,可以通过执行apachectl -v,如果安装了的话会显示 ...

  2. Linux(Centos)安装node及anyproxy

    一.安装node //下载 wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz //解压 tar xf node-v1 ...

  3. MVC 之集合类转化为DataTable

    private static DataTable ToDataTableTow(IList list) { DataTable result = new DataTable(); if (list.C ...

  4. 大白话抽象工厂模式(Abstract Factory Pattern)

    实例分析 大白话工厂方法模式(Factory Method)一文中,我们讲解了日产4S店工厂规模的扩大,创建了针对不同车型的工厂,减少了工厂的工作内容,提高了效率.下面我们继续以4S店的故事讨论抽象工 ...

  5. Spring Boot2.X整合消息中间件RabbitMQ原理简浅探析

    目录 1.简单概述RabbitMQ重要作用 2.简单概述RabbitMQ重要概念 3.Spring Boot整合RabbitMQ 前言 RabbitMQ是一个消息队列,主要是用来实现应用程序的异步和解 ...

  6. POJ 3304 Segments(判断直线与线段是否相交)

    题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...

  7. Fabric1.4:Go 链码开发与编写

    1 链码结构 1.1 链码接口 链码启动必须通过调用 shim 包中的 Start 函数,传递一个类型为 Chaincode 的参数,该参数是一个接口类型,有两个重要的函数 Init 与 Invoke ...

  8. EntityFramework Core表名原理解析,让我来,揭开你神秘的面纱

    前言 上一节我们针对最开始抛出的异常只是进行了浅尝辄止的解析,是不是有点意犹未尽的感觉,是的,我也有这种感觉,看到这里相信您和我会有一些疑惑,要是我们接下来通过注解.Fluent APi.DbSet分 ...

  9. 极简安装 TensorFlow 2.0 GPU

    前言 之前写了几篇关于 TensorFlow 1.x GPU 版本安装的博客,但几乎没怎么学习过.之前基本在搞 Machine Learning 和 Data Mining 方面的东西,极少用到 NN ...

  10. mysql的查询优化

    参考网站:http://www.liyblog.top/p/6 这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你     1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 wh ...