关闭

多线程异步处理示例

188人阅读 评论(0) 收藏 举报
public class UserTrackTask {

 

private static Logger logger = LoggerFactory.getLogger(UserTrackTask.class);

 

private static AtomicBoolean init = new AtomicBoolean(false);

 

private static AtomicBoolean running = new AtomicBoolean(false);

 

private static ExecutorService executorService = Executors.newFixedThreadPool(1);

 

private static BlockingQueue<UserTrackModel> queue = new LinkedBlockingQueue<UserTrackModel>();

 

private static UserTrackService userTrackService;

 

private static void init(){

if(init.get()){

return;

}

synchronized (init) {

if(init.get()){

return;

}

if(userTrackService == null){

userTrackService = SpringContextUtil.getBean(UserTrackService.class);

}

if(!running.get()){

start();

}

init.set(true);

}

}

 

private static void start(){

if(running.get()){

return;

}

running.set(true);

executorService.execute(new Runnable() {

 

@Override

public void run() {

try {

while (running.get()) {

UserTrackModel track = null;

try {

track = queue.take();

if(track == null){

continue;

}

userTrackService.add(track);

} catch (Exception e) {

logger.error("add user track due to error",e);

}

}

} catch (Exception e) {

logger.error("proccess creditlog thread is exit!!!!");

}

}

});

}

 

public static void save(String uid,String openId,String domain,String url,long time){

UserTrackModel track = new UserTrackModel(uid,openId,domain,url,time);

boolean bool = offer(track);

if(!bool){

logger.error("put creditlog queue due to fail. createlog=[{},{},{},{},{}]",uid,openId,domain,url,time);

}

}

 

private static boolean offer(UserTrackModel track) {

if(!init.get()){

init();

}

return queue.offer(track);

}

}

0
0
查看评论

异步消息处理机制--线程

多线程编程 执行一条耗时操作,需放在子线程里运行 1、线程的基本用法 新建类继承 或实现接口  ,重写方法--(可直接内部类) ● class MyThread extends Thread { ~run () { //处理具体的逻辑 }     } new...
  • qq_35893033
  • qq_35893033
  • 2017-02-11 14:06
  • 402

多线程 异步处理

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] in...
  • lanliang901125
  • lanliang901125
  • 2013-11-28 14:12
  • 545

多线程和异步操作

多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有 一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。 异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好...
  • farmwang
  • farmwang
  • 2017-01-18 20:40
  • 215

vb.net 的异步处理

 按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件。用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution)。既然这样,那么为什么要引入异步执行的概念呢? 目录 为什么要使用异步调用 实现异步调用的步骤和机理 为什么要使用异步调用...
  • action20
  • action20
  • 2014-02-26 13:26
  • 1503

NIO 多线程处理异步队列

本文使用java的NIO简单实现server-client模式,处理异步队列。缓存队列类
  • Ant_Shen
  • Ant_Shen
  • 2017-04-22 20:59
  • 468

c#多线程与异步开发 (上)

项目中需要一些多线程或异步的知识点,找资料时看到了这篇文章,觉得讲的很不错,转载过来,想要学习的可以看原文,原文链接,感谢原作者提供好文章引言本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发。 其中委托的BeginInvoke方法...
  • suifcd
  • suifcd
  • 2016-01-22 19:32
  • 4883

iOS多线程及异步处理

概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行。改变这种状况可以从两个角度出发:对于单核处理器,可以将多个步骤放到...
  • guobing19871024
  • guobing19871024
  • 2017-03-16 14:29
  • 916

Servlet异步处理示例

@WebServlet(urlPattens=”/demo”, asyncSupported = true) public class AsyncDemoServlet extends HttpServlet { @Override public void doGet(Http...
  • xiewz1112
  • xiewz1112
  • 2017-04-17 14:53
  • 105

多线程和异步处理理解

和老师讨论了下,最终大致理解了linux的用户态线程和windows的核心态线程概念。 资料部分引用自http://www.2cto.com (1)用户态线程:(linux)     由于内核并没有对多线程进程的支持,因此,内核中只有单线程进程的概念,&...
  • wk360833257
  • wk360833257
  • 2013-10-09 11:29
  • 357

在非UI线程处理Bitmap(实用)

转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-)  http://my.oschina.net/ryanhoo/blog/88344 译者:Ryan Hoo 来源:https://developer.andro...
  • dp543831577
  • dp543831577
  • 2014-02-12 18:08
  • 537
    个人资料
    • 访问:32816次
    • 积分:753
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:11篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论