package com.xiaonei.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
*
要充分利用java的多线程特性,对于比较耗时,且用户无须等待通知的事件,可以考虑采用异步事件处理,
本文模拟发送邮件,以及一个自动更新的任务调度:
* @author Administrator
*
*/
public class ExecutorsTest {
/**
* 异步事件,发送邮件
*/
private ExecutorService service = Executors.newFixedThreadPool(8);
/**自动更新调度线程*/
private ScheduledExecutorService scService = Executors.newSingleThreadScheduledExecutor();
/**自动更新时间间隔*/
private static final int UPDATE_INTERVAL = 2; //s
private AtomicInteger counter = new AtomicInteger(); //计数器类
private static ExecutorsTest instance = new ExecutorsTest();
public static ExecutorsTest getInstance(){
return instance;
}
private ExecutorsTest() {
startUpdateMoniter();
}
private void startUpdateMoniter(){
scService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("任务自动更新:"+System.currentTimeMillis()+",次数:"+getNextId());
}
}, UPDATE_INTERVAL, UPDATE_INTERVAL, TimeUnit.SECONDS);
}
public int getNextId(){
return counter.incrementAndGet();
}
/**
* 发送邮件
* @param emails
* @return
*/
public boolean sendMail(String emails){
service.submit(new SendMailsTask(emails));
return true;
}
public static void main(String[] args) {
ExecutorsTest test = ExecutorsTest.getInstance();
System.out.println(test.sendMail("yangxinyan@qq.com"));
}
}
/**
* 异步发送邮件
*/
class SendMailsTask implements Runnable{
String emails = "";
public SendMailsTask(String emails) {
this.emails = emails;
}
@Override
public void run() {
System.out.println("--------发送邮件--:"+emails+Thread.currentThread().getName());
}
}
分享到:
相关推荐
在“Labview2015多线程异步调用工程”中,我们探讨的核心是利用多线程和异步调用来提高程序执行效率和并发能力。这个工程的目的是让主线程能持续快速地进行轮询,同时多个子线程可以并行处理耗时的任务,从而优化...
3. 多线程与异步定时器的结合:如何在多线程环境中有效利用异步定时器,例如用定时器触发线程间通信或者调度任务。 4. 性能优化策略:学习如何评估和优化多线程和异步定时器的性能,包括线程池的使用、避免不必要的...
《大规模虚拟地形数据多线程异步调度算法》是一篇探讨如何有效处理大规模虚拟地形环境实时绘制问题的学术论文。作者任子健和陈璐针对海量地形数据的处理提出了一个创新性的算法,该算法旨在提高数据调度效率,满足大...
- 这可能是一个自定义的UI窗口,专门用于显示多线程异步任务的进度。它可能包含一个进度条控件和相关状态信息,如任务名称、已完成百分比等。 - 在`ProgressWindow`中,通常会有一个后台线程负责执行任务,同时...
在C#编程中,多线程异步下载是一种常见的网络编程技术,用于提高应用程序的响应性和性能。在大型文件下载场景下,通过并发执行多个下载任务,可以显著减少整体的下载时间。本教程将深入探讨如何利用C#的WentClient类...
本文将深入探讨Qt线程池及其在实现多任务抢占多线程调度中的应用,以及如何利用Qt事件循环来解决假死问题。 首先,我们需要理解Qt线程池(QThreadPool)的概念。线程池是一种线程管理机制,它预先创建一组线程,当...
Java多线程异步性是Java编程中一个关键的概念,特别是在设计高性能、高并发的应用时。多线程允许程序同时执行多个独立的任务,而异步性则是这些任务在不互相等待的情况下并行运行的能力,提高了系统的效率和响应速度...
本文将深入探讨在Spring中如何利用多线程和动态任务来实现异步处理,并分享一些实践心得。 首先,我们要理解Spring的异步处理机制。Spring通过`@Async`注解实现了方法级别的异步执行。当一个带有`@Async`的方法被...
但需要注意的是,多线程并不意味着真正的并行,因为CPU核心数量有限,线程间的调度和上下文切换会消耗资源。 3. **异步编程**:异步编程是另一种提高程序响应性的方法,它允许程序在等待某个耗时操作(如I/O操作)...
总结来说,通过合理地利用线程池进行任务调度,结合LruCache进行内存缓存,可以有效地实现多线程异步下载图片,并优化性能。这种方式在处理大量图片资源的场景下尤为适用,既能提高用户体验,又降低了服务器压力。在...
本项目"多线程异步加载Tabhost修改版"聚焦于如何利用多线程技术来改善Tabhost的加载性能,确保用户界面的流畅性。 Tabhost是Android系统提供的一个组件,用于实现多标签页的界面。它允许在一个Activity中切换多个...
### C#多线程与异步的区别 #### 引言 随着现代计算机技术的发展,特别是多核处理器的广泛应用,多线程与异步操作成为提高应用程序性能的关键手段。本文将深入探讨C#中的多线程与异步操作,旨在帮助开发者更好地...
在IT领域,多线程异步下载是一种常见的优化策略,特别是在处理大文件或者需要提高用户体验的场景下。本文将深入探讨这一技术,并基于提供的"Download_Demo"项目进行讲解。 多线程是并发编程的一种方式,它允许程序...
除了多线程之外,还可以通过协程、事件驱动等方式实现异步处理。 #### 五、示例分析 以文档中给出的示例为例: 1. **同步处理**:所有任务按照顺序执行,总耗时为27分钟。 2. **异步处理**:通过合理安排任务执行...
总结,`@Scheduled`任务调度是Spring Boot中实现定时任务的关键,它可以配合多线程和`@Async`异步任务提升程序的并发性能。通过自定义线程池和配置`TaskExecutor`,我们可以更好地控制任务的执行方式,从而优化应用...
任务调度是多线程或多任务系统的关键部分。好的调度策略能够最大化资源利用率,减少任务间的等待时间,提高系统响应速度。库中的调度器可能支持优先级调度、轮转调度或其他自定义调度算法,以满足不同应用场景的需求...
在“winform多线程多任务管理”这个项目中,`TaskManager`可能是实现任务管理和调度的核心组件。它可能包含了对线程的创建、监控、暂停、恢复和取消等功能。可以设计一个`Task`类来表示每个任务,包含任务状态、...
本资源包聚焦于"C#编写的异步多线程服务器的类",这是一门高级技术,用于构建高性能、高并发的网络服务。在现代应用中,尤其是在处理大量并发连接时,异步多线程技术显得尤为重要。 异步编程是C#的一项关键特性,它...
GCD(Grand Central Dispatch)是苹果推出的一种强大的多线程解决方案,它为开发者提供了简单而高效的方式来管理并发任务。本文将深入探讨GCD中的异步任务、线程锁以及如何在iOS中实现它们。 首先,我们要理解什么...
总结来说,"c#编写的多线程上位机"项目涉及到了C#语言的多线程编程技术,包括线程创建、同步、异步、线程池、线程间通信等多个方面。开发者需要熟练掌握这些知识点,以确保上位机程序的稳定性和高效性。通过提供的da...