Java-异步线程池实现任务执行

一、线程是计算机中的基本执行单元,它是程序中的一个独立的顺序控制流。线程可以被操作系统调度和执行,多个线程可以同时运行在多个处理器上,实现并发执行。每个线程都有自己的栈空间和寄存器,线程之间可以共享相同的全局变量。

二、异步是一种程序设计模式,它指的是一种执行模式,其中一个操作在开始执行后就可以立即返回,而不必等待操作的完成。异步操作通常通过回调函数、事件、消息传递等方式进行处理。在异步编程中,当一个操作比较耗时时,程序可以继续执行其他任务,而不必等待该操作的完成

三、线程池是一种线程管理机制,它通过维护一定数量的线程,来处理提交给它的多个任务。线程池可以重复利用线程,避免频繁创建和销毁线程的开销。线程池可以实现任务的并发执行,提高程序的效率。

异同总结:

1.线程和异步:
线程是一种用于实现并发执行的机制,而异步是一种用于提高程序执行效率和响应性的模式。线程可以在多个操作之间进行切换,实现并发执行,而异步操作可以让程序在处理耗时操作时不被阻塞,提高程序的响应速度。
2.异步和线程池:
异步和线程池的联系在于它们都可以用来实现并发处理。线程池可以用于执行异步任务,通过创建一定数量的线程来并发执行多个任务,提高程序的性能。在某些情况下,异步操作也可以利用线程池来实现,通过将异步操作封装为任务提交至线程池进行处理。
异步和线程池的区别在于它们的目的和实现方式。异步是一种编程模式,用于提高程序的响应性和并发处理能力,通过非阻塞的方式去执行耗时操作。线程池是一种线程管理机制,用于提高程序的性能和资源利用率,通过复用线程来避免线程创建和销毁的开销。异步操作侧重于编程模式和调用方式,而线程池侧重于线程管理和任务调度。
@Component("testTask")
public class TestTask {
    @Autowired
    private ISysJobService jobService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private ICustomerService customerService;
    @Autowired
    private Scheduler scheduler;
    @Autowired
    private CornLogMapper cornLogMapper;

    /**
     * 定时任务
     */
    @Async("asyncServiceExecutor")
    public void saveOrder(String jobName) throws SchedulerException {
        long start = System.currentTimeMillis();
        String name = Thread.currentThread().getName();
        String main = "TestTask.execute()..." + name;
        System.out.println(main);
        AsyncManager.me().execute(new TimerTask() {
            @Override
            public void run() {
                String name1 = Thread.currentThread().getName();
                System.out.println(name1+"..."+name1 + "...start");
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
                try {
                    //实际业务逻辑
                    ......
                    System.out.println(name1+"--"+Thread.currentThread().getName() + "...end");
                    long end = System.currentTimeMillis();
                    System.out.println(name1+"..."+"总共耗时: " + (end - start)+"...成功结束");
                } catch (Exception e) {
                    e.printStackTrace();
                    long end = System.currentTimeMillis();
                    System.out.println(name1+"--"+"总共耗时: " + (end - start)+"...异常结束");
                }
            }
        });
    }
}