例如web服务器、数据库服务器、文件服务器或邮件服务器之类的。请求的时候,单个任务时间很短,但是请求数量巨大。每一次请求,就会创建一个新线程,然后在新线程中请求服务,频繁的创建线程,销毁线程造成系统很大的开销,资源的浪费。
线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程车创建的开销分摊到多个任务上。
对具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果。get方法会阻塞,直到任务返回结果。
Callable与Runnable功能相似,Callable有返回值;Runnable没有返回值;一般情况下,Callable与FutureTask一起使用,或者与线程池一起使用
一般系统,多数会与第三方系统的数据进行打交道,而第三方的生产库,并不允许我们直接操作。在企业里面,一般都是通过中间表进行同步,即第三方系统将生产数据放入一张与其生产环境隔离的另一个独立数据库中的独立表,在根据接口协议,增加相应的字段。而我方需要读取该中间表中的数据,并对数据进行同步操作。此时就需要编写相应的程序进行数据同步。
读取中间表的数据,并同步到业务系统中
pom.xml
log4j.properties
middle-student.xml
test-student.xml
mybatis-config-middle.xml
mybatis-config-test.xml
StudentConst.java
DruidDataSourceFactory.java
student.java
Student.java
MiddleProcess.java
TestProcess.java
MiddleProcessImpl.java
TestProcessImpl.java
Consumer.java
Producer.java
Main.java
SqlSessionUtil.java
middle.student
test.student
mainClass指定启动包下的main
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 默认启动 程序,mainClass指定启动的main函数的报名 --> <mainClass>com.cyb.start.Main</mainClass> <layout>JAR</layout> <addResources>true</addResources> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>