美文网首页
Java并发编程的艺术

Java并发编程的艺术

作者: xuyouxin1 | 来源:发表于2017-11-22 16:43 被阅读0次

volatile:在多处理器的开发中保证了共享变量的“可见性”。一个线程改了一个变量,别的线程能马上读取到改之后的值。

synchonized:

对于普通同步方法,锁是当前实例对象。

对于静态同步方法,锁是当前类的Class对象。

对于同步代码块,锁是括号里的对象。

六、Java并发容器和框架

1、ConcurrentHashMap:线程安全且高效的HashMap

HashMap在并发执行put操作时会引起死循环。

HashTable使用synchonized来保证线程安全,效率低。

2、ConcurrentLinkedQueue:线程安全的队列

非阻塞队列。

3、BlockingQueue:阻塞队列

有界队列,元素满时,想放入元素会阻塞;元素空时,想取出元素也会阻塞。

实现有:

ArrayBlockingQueue:数组实现的有界阻塞队列

LinkedBlockingQueue:链表实现的有界阻塞队列

ProirityBlockingQueue:支持优先级排序的无界阻塞队列

等共7个

4、Fork、Join框架

Fork就是把一个大任务分为若干子任务并行执行;

Join就是合并这些子任务的执行结果。

八、Java中的并发工具类

1、CountDownLatch:允许等待其他线程完成操作

核心方法:

CountDownLatch(int) 计数器初始值

countDown( )计数器减一

await( ) 等待计数器为0,才往下执行

2、CyclicBarrier:同步屏障

让一组线程到达一个屏障时被阻塞;直到最后一个线程到达屏障时,屏障才会开门,所有被拦截的线程才会继续运行。

核心方法:

CyclicBarrier(int, Runnable),参数1表示屏障开门的线程数要求;参数2为屏障开门时先执行的线程,之后才执行被拦截的线程。

await( ),拦截线程,等待屏障开门

3、Semaphore:信号量

Semaphore用来控制同时访问特定资源的线程数量。

核心方法:

Semaphore(int),参数为资源数

acquire( ),请求资源,没获取到资源时,线程阻塞。

release( ),释放资源

4、Exchanger:线程间交换数据

它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。

核心方法:

exchange(T) 

如果两个线程有一个没有执行exchange(T)方法,则会一直等待。有重载的方法,能够设置超时时间。

十、Executor

FixedThreadPool:固定线程数的线程池

SingleThreadExecutor:单线程数的线程池

CachedThreadPool:根据需要创建新线程的线程池

ScheduledThreadPoolExecutor:周期执行各种任务

Future接口表示异步计算的结果。FutureTask除了实现Future接口外,还实现了Runnable接口。因此,FutureTask可以交给Executor执行。

相关文章

网友评论

      本文标题:Java并发编程的艺术

      本文链接:https://www.haomeiwen.com/subject/latovxtx.html