高并发的简单处理方法
来源:互联网 发布:淘宝图片拍摄技巧 编辑:程序博客网 时间:2024/05/17 09:25
1.定义一个类:
package com.lijie.xcaq;import java.util.Date;import java.util.concurrent.ConcurrentHashMap;import org.apache.log4j.Logger;/** * Lijie * */public class ThreadUtil { private static final Logger log = Logger.getLogger(ThreadUtil.class); private static final ConcurrentHashMap<String, Long> cmap = new ConcurrentHashMap<String, Long>(); public synchronized static boolean getLock(String key, int timeOut) { Long valueLong = cmap.get(key); if (null == valueLong) { cmap.put(key, new Date().getTime()); log.info("the first time get the lock"); return true; } Long valueNow = new Date().getTime(); if ((valueNow - valueLong) < timeOut) { log.error("can not get the lock!"); return false; }else{ cmap.put(key, valueNow); log.warn("can get the lock!"); } return false; } public synchronized static void relaseLock(String key){ cmap.remove(key); log.info("relase the lock!"); }}
2.测试
package com.lijie.xcaq;public class ThreadTest { public static void main(String[] args) throws InterruptedException { Thread b = new B(); Thread c = new C(); if(ThreadUtil.getLock("my.lock", 5000)){ b.start();// ThreadUtil.relaseLock("my.lock"); } if(ThreadUtil.getLock("my.lock", 5000)){ c.start();// ThreadUtil.relaseLock("my.lock"); } }}class B extends Thread { @Override public void run() { int i = 0; while (i < 1000) { i++; System.out.println("BBBBBBBBBBBBBBBBBBBB"); } }}class C extends Thread { @Override public void run() { int i = 0; while (i < 1000) { i++; System.out.println("CCCCCCCCCCCCCCCCCCCCCCC"); } }}
3.other
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>xcaq</groupId> <artifactId>xcaq</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>xcaq</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies></project>
log4j
# To change this license header, choose License Headers in Project Properties.# To change this template file, choose Tools | Templates# and open the template in the editor.log4j.rootLogger=INFO,dailyFile log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Threshold=INFOlog4j.appender.console.ImmediateFlush=truelog4j.appender.console.Target=System.outlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss SSS}-->[%t] %C: %m %n#\u6BCF\u5929\u4EA7\u751F\u4E00\u4E2A\u65E5\u5FD7log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.dailyFile.File=d:/logs/eclipselog4j.appender.dailyFile.Append=truelog4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss SSS}-->[%t] %C: %m %nlog4j.appender.dailyFile.Threshold=INFOlog4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd'.log'
0 0
- 高并发的简单处理方法
- 高并发的处理方法
- 高并发架构以及处理高并发的常见方法
- java web处理高并发的方法
- 高并发的一些处理方法
- php网站大数据高并发处理方法简单总结
- 处理高并发高负载类网站的优化方法
- 高并发高访问请求的处理方法
- 高并发的处理
- 高并发处理方法总结
- 高并发架构处理方法
- Tornado高并发处理方法
- Java处理 网站高并发问题 的优化方法
- Java处理 网站高并发问题 的优化方法
- J2EE高并发的处理
- NGINX的高并发处理
- 网站高并发的处理
- 高并发的简单理解
- [leetcode] 【字符串】 67. Add Binary
- 面向对象多继承
- 模板类错误程序
- LeetCode-349&350.Intersection of Two Arrays
- Mybatis学习与Spring MVC 的集成(6)
- 高并发的简单处理方法
- tornado study 1
- HttpURLConnection请求数据
- 从线行回归到高斯过程分类
- 单链表面试题系列之链表相交问题
- Java学习之集合框架(中)
- rpc
- Android数据存储实现的5大方式
- struts web参数访问的几种方式