`

并发处理

 
阅读更多
public static void main(String[] args){
		if (args.length != 2) {
			System.out.println("Usage: java AutoLocationMain spring.xml autoLocation.conf");
			return;
		}
		String springXmlfile = args[0];
		String confFile = args[1]; 
		
		System.out.println(springXmlfile + "   " + confFile);
		
		LocationMain locationMain=new LocationMain(springXmlfile,confFile);
		
		locationQueue=new ArrayBlockingQueue(conf.locationQueueLength);
		
		locationMain.production();
		locationMain.consume();
		
	}
	
	public void production(){
		Timer timer = new Timer();
		timer.schedule(new Producer(locationQueue, conf), 0 , conf.checkInterval*1000);
	}
	
	//消费
	public void consume(){
		LocationMsg obj;
		ExecutorService executorService = Executors.newFixedThreadPool(conf.locationThreadPollNum);
		
		while(true){
			try {
				obj= (LocationMsg)locationQueue.poll(30, TimeUnit.SECONDS);
				if (obj!=null){ 
					Consumer task=new Consumer(obj, locationQueue, conf);
					executorService.submit(task);
				}
				
			} catch (InterruptedException e) { 
				e.printStackTrace();
			}
		}
		
		
	}


//生产者
public class Producer extends TimerTask {
	private static final Logger logger = LoggerFactory.getLogger(Producer.class);
	
	private final BlockingQueue queue;
	private static HashMap<String, String> clockuserMap=new HashMap<String, String>();
	private static int day=0;
	private static int timeIntSystem = 0;
	private static LocationConfig conf=null; 
	
	public Producer(BlockingQueue q, LocationConfig conf){
		this.queue = q;
		this.conf = conf;
	}

	@Override
	public void run() {
		int currTimet = (int)(System.currentTimeMillis()/1000);  
		int nowDay = TimeUtil.dayOfTimet(currTimet); 
		String systime = TimeUtil.timet2String(currTimet, "HH:mm:ss");
		timeIntSystem = changeTimes(systime);
		if (day!=nowDay){
			clockuserMap.clear();
			day=nowDay;
		}
		
		List listOne = new ArrayList();
		List listRepeat = new ArrayList();
		listOne = oneLocation();
		listRepeat = repeatLocation();
		
		logger.debug("  -----------------------------   listOne size : " + listOne.size() + " listRepeat size  " + listRepeat.size());
		logger.debug("  -----------------------------   queue size : " + queue.size());
		
		if(listOne.size() > 0){
			try {
				for (int i = 0; i < listOne.size(); i++) {
					Object obj = listOne.get(i);
					queue.put(obj);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		if(listRepeat.size() > 0){
			try {
				for (int i = 0; i < listRepeat.size(); i++) {
					Object obj = listRepeat.get(i);
					queue.put(obj);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}


//消费者
public class Consumer implements Callable {

	private final Logger logger=LoggerFactory.getLogger(Consumer.class);
	
	private final BlockingQueue queue;
	private static LocationConfig conf=null; 
	
	LocationMsg obj ;
	
	public Consumer(LocationMsg obj, BlockingQueue queue, LocationConfig conf){
		this.obj = obj;
		this.queue = queue;
		this.conf = conf;
	}
	
	//消费,定位
	public Object call(){
		String returnId = location(obj.getMobile(), obj.getCompanyId());
		if(!returnId.equals("1") && !returnId.equals("0")){
			String returnId2 = location(obj.getMobile(), obj.getCompanyId());
			if(!returnId.equals("1")){
				locationError(obj.getMobile(), obj.getCompanyId(), returnId2);
			}
		}else if(returnId.equals("0")){
			try {
				Thread.sleep(conf.resentIntervalTime*1000);
				String returnId2 = location(obj.getMobile(), obj.getCompanyId());
				if(!returnId.equals("1")){
					locationError(obj.getMobile(), obj.getCompanyId(), returnId2);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		/*if(returnId.equals("9990245") || returnId.equals("11196") || returnId.equals("1119207") || returnId.equals("11192") || returnId.equals("1110102")){
			if(obj.getResult() < 2){
				LocationMsg lm = new LocationMsg();
				lm.setMobile(obj.getMobile());
				lm.setCompanyId(obj.getCompanyId());
				lm.setResult(obj.getResult() + 1);
				try {
					queue.put(lm);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}else {
				locationError(obj.getMobile(), obj.getCompanyId(), returnId);
			}
			
		}else if(returnId.equals("0")){
			try {
				Thread.sleep(conf.resentIntervalTime*1000);
				String returnId2 = location(obj.getMobile(), obj.getCompanyId());
				if(returnId.equals("9990245") || returnId.equals("11196") || returnId.equals("1119207") || returnId.equals("11192") || returnId.equals("1110102") || returnId2.equals("0")){
					locationError(obj.getMobile(), obj.getCompanyId(), returnId2);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}*/
		
		return null;
	}
}

 

分享到:
评论

相关推荐

    ActiveMQ高并发处理方案

    ### ActiveMQ高并发处理方案详解 #### 一、引言 在现代分布式系统中,消息队列作为异步通信的核心组件之一,对于提高系统的吞吐量、降低响应时间和实现服务解耦等方面起着至关重要的作用。Apache ActiveMQ作为一款...

    testBoost001_boost多并发处理程序_Boost_

    在"testBoost001_boost多并发处理程序"中,我们主要关注的是Boost库在多并发处理方面的应用。 **Boost.Asio** Boost.Asio是Boost库的一部分,它是用于网络和低级I/O操作的跨平台库。Asio提供了一种统一的方式来...

    Weblogic提高并发处理性能的设置

    ### Weblogic提高并发处理性能的设置 在现代企业级应用环境中,提高Weblogic服务器的并发处理能力是一项重要的优化措施。本文将详细介绍通过调整Weblogic线程数、设置JDBC缓冲池以及修改`startWeblogic.cmd`文件来...

    多线程并发处理的简单实现

    在编程领域,多线程并发处理是一种常见的优化技术,它能充分利用多核处理器的资源,提高程序的执行效率。在给定的标题“多线程并发处理的简单实现”中,我们可以深入探讨如何构建这样的系统。 首先,多线程并发处理...

    qtconcurrent 多线程并发处理

    在编程领域,多线程并发处理是提升程序执行效率的关键技术之一。Qt库提供了一个强大的模块——qtconcurrent,使得开发者能够轻松地在Qt应用程序中实现多线程并行计算。本文将深入探讨qtconcurrent模块,以及如何在Qt...

    Django多并发处理

    ### Django多并发处理详解 #### 一、问题背景与需求分析 在现代Web应用开发中,随着业务量的增长,单一的请求处理模型往往无法满足高并发场景的需求。Django作为一款基于Python的流行Web框架,虽然功能强大且易于...

    linux服务器每秒并发处理数的计算方法[归类].pdf

    【Linux服务器每秒并发处理数计算方法】 在软件开发领域,尤其是涉及服务器性能优化时,了解服务器每秒并发处理数是非常关键的。这涉及到服务器在单位时间内能够处理多少个同时发起请求的客户端连接,直接影响到...

    Linux C语言 线程池 状态机 并发处理Demo

    本项目提供了一个关于“Linux C语言线程池、状态机和并发处理”的Demo,非常适合初学者理解和实践多线程技术。下面将详细阐述这些知识点。 首先,线程池是一种线程管理机制,它预先创建了一组线程,待有任务需要...

    服务器并发处理.pptx

    服务器并发处理技术详解 服务器并发处理是指服务器同时处理多个请求或任务的能力,是一种提高服务器性能和响应速度的技术。并发处理可以分为两种:真正的并发(并行:Parallelism)和表面上的并发(并发:...

    Java的并发处理方式

    Java 并发处理方式 在多线程编程中,线程之间的并发访问可能会导致资源争夺和数据不一致的问题。 Java 提供了多种方式来解决并发问题,包括使用锁、同步代码块和 volatile 变量等。 一、什么是并发问题? 并发...

    如何创建高并发处理系统--一个并发处理框架

    ### 如何创建高并发处理系统——一个并发处理框架 #### 概述 随着互联网服务规模的不断扩大,构建能够处理大量并发请求的系统变得至关重要。这些系统不仅需要在资源有限的情况下保持峰值吞吐量,还需要具备高可用...

    java并发编程与高并发处理.xmind

    java并发编程总结,为xmind格式,总结的很详细,包含常见的并发容器,锁等知识

    http文件服务器 多线程 并发处理

    **并发处理**: 并发处理是指在同一时间处理多个任务或请求。在服务器环境中,这意味着可以同时服务于多个客户端。并发处理可以通过多线程、多进程或者其他异步I/O模型(如事件驱动编程或回调函数)来实现。在这个...

    Django实现并发处理的例子

    首先,"并发处理"是指系统在同一时间内处理多个请求的能力。在Django中,这可以通过多种方式实现,如多线程、多进程或者使用异步I/O模型。在Linux下,由于其内核支持多线程和多进程,因此为并发提供了良好的基础。 ...

    管理大批量并发处理.zip

    在IT领域,特别是服务器端和分布式系统的设计与优化中,管理大批量并发处理是一项至关重要的任务。并发处理能够显著提高系统的效率,使多个任务或请求同时进行,从而充分利用硬件资源,提升整体性能。本压缩包文件...

    深入解析Oracle与MySQL在并发处理能力上的差异

    本文将深入探讨这两种数据库在并发处理能力上的区别,并通过代码示例来说明它们在实际应用中的表现。 Oracle和MySQL在并发处理能力上有明显的差异。Oracle通过其高级的并行处理技术和行级锁机制,在大规模数据处理和...

    服务器并发处理能力+-+IO模型

    ### 服务器并发处理能力与I/O模型 #### 一、引言 服务器的并发处理能力是衡量其性能的关键指标之一,特别是在处理大量并发连接请求的场景下尤为重要。与此同时,I/O模型的选择对于优化服务器性能也至关重要。本文...

    多线程并发处理

    在计算机科学中,多线程并发处理是一种编程技术,它允许多个线程在同一时间执行,从而提升程序的效率和响应速度。特别是在现代处理器架构中,多线程并发处理是利用多核处理器资源的关键手段。以下是对给定文件中可能...

Global site tag (gtag.js) - Google Analytics