关于并发必须知道的几个概念:
同步和异步
同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中“真实”地执行。整个过程,不会阻碍调用者的工作。
线程同步和线程异步
线程同步:
即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。
在java中,线程同步的实现机制有很多种。比如最简单的synchronized关键字,以及读写锁,重入锁等锁机制。
线程异步:
指的是当有一个线程在调用某个方法的时候,这个方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。
在spring3.0之后,提供了@Async注解来开辟一个独立的线程用于异步执行方法。还可以使用自己创建线程池ThreadPoolExecutor,手动调用的方法来开辟异步线程。
并发和并行
并发:
在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序