Java并发编程
默认沙丁鱼
这个作者很懒,什么都没留下…
展开
-
synchronized的使用总结
一. synchronized的基本使用规则synchronized的基本使用规则可总结为以下3条。 1. 当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,其他线程对“该对象”的该“synchronized方法”或者“synchronized代码块”的访问将被阻塞。 2. 当一个线程访问“某对象”的“synchronized方法”或者“sync原创 2016-04-09 21:24:55 · 367 阅读 · 0 评论 -
详解ThreadPoolExecutor与ScheduledThreadPoolExecutor
一.ThreadPoolExecutor通过Executors,可以创建3种类型的ThreadPoolExecutor。 - FixedThreadPool - SingleThreadExecutor - CachedThreadPool1.FixedThreadPool FixedThreadPool被称为可重用固定线程数的线程池。下面是FixedThreadPool的源代码实现。pub原创 2016-04-06 20:23:13 · 5439 阅读 · 0 评论 -
Executor使用举例
并行计算求和 public class ConcurrentSum { private int coreCpuNum; private ExecutorService executor; private List> tasks = new ArrayList>(); public ConcurrentSum(){ coreCpuNum = Runtime.getRuntime(原创 2016-04-06 13:11:08 · 312 阅读 · 0 评论 -
Semaphore控制线程并发数
信号量用于控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理使用公用资源。 Semaphore常用于流量控制,特别是公用资源特别有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为那是IO密集型任务,我们可以启动几十个线程并发地读取,但是读取到内存之后,还需要存储到数据库中,而数据库连接的数量非常有限,只有10个,这时我们必须控制只有10个线程同时获取数据库连接原创 2016-04-03 21:12:21 · 333 阅读 · 0 评论 -
java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
java.lang.Thread.sleep() sleep()方法为Thread类定义的静态方法,因此需要通过Thread类调用该方法; 调用sleep()方法将会导致当前正在执行线程休眠特定的时间; 一般情况下,调用sleep()方法后进入休眠状态的线程并不会释放其持有的对象锁。 java.lang.Object.wait() wait()方法是Object类定义的普通方法,因此任何对象都可调用原创 2016-03-27 15:02:20 · 530 阅读 · 0 评论 -
多线程编程中的等待/通知机制和等待超时模式
1. 等待/通知机制等待/通知机制,是指WaitThread首先获取了对象的锁,然后调用对象的wait()方法,从而放弃了锁进入了对象的等待队列中,进入等待状态。NotifyThread随后获取了对象的锁,并调用对象的notify()或notifyAll()方法,将Wai tThread从等待队列中移到同步队列中,此时等待线程的状态变为阻塞状态。 下面分别针对等待方(消费者)和通知方(生产者)进原创 2016-03-27 15:51:52 · 3479 阅读 · 1 评论 -
Exchanger用于线程间交换数据
Exchanger是一个用于线程间协作的工具类,用于线程间的数据交换。它提供一个同步点,在这个同步点,两个线程通过exchange方法交换数据。先到达同步点的线程会等待后到达的线程。 应用举例:package piped;import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; impor原创 2016-04-03 16:51:56 · 313 阅读 · 0 评论 -
生产者消费者模型
package piped; public class ProducerAndConsumer { public static void main(String[] args) { Depot mDepot = new Depot(100); Producer mPro = new Producer(mDepot); Customer mCus = new Customer(mDe原创 2016-04-09 23:33:45 · 295 阅读 · 0 评论