近几天工作不是很忙,自己学习了一些并发编程技术。买了两本书《Java并发变成核心方法与框架》和《Java并发编程实战》。其中第一本书看了两遍,第二本正在学习。但在学习过程中,发现第二本并发实战讲的没有第一本详细。但是讲了很多关于并发编程的解决方案。所以推荐,如果初次学习并发编程,看第一本书,有过并发、多线程开发经验的看第二本书。
看完《Java并发变成核心方法与框架》这本书后,总结了以下几个方法:
一、Semaphore:用来规定使用多少个线程。
二、Exchanger:用来两个线程之间传输数据。
三、CountDownLatch:用来实现多个线程相互等待,等所有线程全部执行完成后,再一起向下进行。(只可使用一次)。线程完成一个,计数减一,直到计数为0,则释放继续向下进行。
四、CyclicBarrier:用来实现多个线程相互等待,等所有线程全部执行完成后,再一起向下进行。(可进行多次,多屏障等待)。线程完成一个,计数减一,直到计数为0,则释放继续向下进行。
五:Phaser:用来实现多个线程相互等待,等所有线程全部执行完成后,再一起向下进行。(可进行多次,多屏障等待)。线程完成一个,计数加一,直到到达指定的计数数,则释放继续向下进行。
六、Executor:用于创建线程池,可重复使用线程,减少系统性能开销。接口为ExecutorService
1.newcachedThreadPool :创建无界线程池。
2.newFixedThreadPool(int):创建有界线程池。
3.newsingleThreadExecutor():创建单一线程池。
七、ThreadPoolExecutor:用于创建线程池,可重复使用线程,减少系统性能开销。可设置线程池核心线程数、最大线程数、设定多少秒后删除执行完成的线程以及可设置线程使用的队列。
八、Future(Callable,Runnable):Callable用于执行有返回值的方法,Runnable用于执行无返回值的方法。Future用于获取返回值和执行结果。
九、CompletionService:接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离开来进行处理。使用submit执行任务,使用take取得已完成的任务,并按照完成这些任务的时间顺序处理它们的结果。
十、ScheuledExecutorService:实现定时任务。与线程池功能结合使用。
十一、Fork-Join分治编程:把一个大任务分解成多个小任务,然后再把各个小任务的结果进行汇总。
十二、并发集合框架。