-
第21章 – 并发 – 线程之间的协作 object的wait()与notify()和notifyAll()
Mar182015线程之间的协作 object的wait()与notify()和notifyAll() 1. 这些方法只能在 同步控制方法(synchronized修饰的方法)或同步块(synchronized修饰代码块) 中调用. 非同步方法或非同步块中调用,代码可以编译通过,但执行时抛IllegalMonitorStateException 因为调用这些对象时,必须要事先获取对象 ...
阅读全文抢沙发
-
第21章 – 并发 – 线程休眠,优先级,线程异常处理
Mar1820151. 线程修改调用Thread的sleep()方法,可以使用TimeUnit的sleep方法 (其实也是调用当前线程的sleep方法,不过使用TimeUnit更方便) 2. join()方法按字面理解,是指让别的线程(other)加入到当前线程(Current)中.就是当前线程运行时 调用别的线程的other.join(),使得当前线程挂起,别的线程开始执行.可以调用other.interrupt() ...
阅读全文
-
第21章 – 并发 – 共享资源,原子操作
Mar182015第21章 – 并发 – 共享资源,原子操作 1. 针对每一个类,也有一个锁(作为类的class的一部分),所以,synchronized static 方法可以在类的 范围内防止对static字段的并发访问.(P667) 显然,类class的锁和该类对象的锁不是同一个锁,所以不要在普通对象上调用类的static方法. 2. 原子性 ...
阅读全文
-
第21章 – 并发 – 线程阻塞,线程中断,何时以及如何响应中断
Mar182015第21章 – 并发 – 线程阻塞,线程中断,何时以及如何响应中断 1.在线程阻塞时中断 线程的4中状态: (1) 新建(new):线程被创建时,它只会短暂的处于这种状态. 此时线程已经分配了必须的系统资源,并执行了初始化. 此刻线程已经有资格获取CPU时间,之后调度器将把这个线程转变为可运 ...
阅读全文
-
第21章 – 并发 – 单一 生产者与消费者,多个生产者与多个消费者(P709)
Mar182015第21章 – 并发 – 单一 生产者与消费者,多个生产者与多个消费者(P709) 1. 单一 生产者与消费者:一个餐馆只有一个厨师(生产者)和一个服务员(消费者) 代码如下,使用单一的锁restaurant.lockObj来协调厨师和服务员. 当meal为null时,服务员等待,厨师开始工作,反之服务员工作,厨师等待. &nbs ...
阅读全文
-
第21章 – 并发 – 死锁,哲学家进餐问题
Mar1820151. 哲学家问题 5个哲学家围城一圈就餐,因为哲学家都比较穷,每个人只能买得起一根筷子,所以5个哲学家就餐 只有5根筷子.因为哲学家通常都是在思考,所以5个哲学家并不是同时进餐.但是当他们进餐时, 必须获取放置在他们左边和右边的筷子,如果他们左边或者右边的筷子已经被别人拿去了,那他就 只有等待别 ...
阅读全文
-
第21章 – 并发 – 新类库中构件 – CountDownLatch
Mar182015第21章 – 并发 – 新类库中构件 – CountDownLatch 1. CountDownLatch 简介 CountDownLatch 有一个初始化count,当这个count不为0时,线程可以调用这个类的await()方法等待. 其他线程可以调用该类的countDown()方法,使得count计数减1,当这个count计数变成0时,所有在该对象 上await的线程 ...
阅读全文
-
第21章 – 并发 – 新类库中构件 – CyclicBarrier
Mar182015第21章 – 并发 – 新类库中构件 – CyclicBarrier CyclicBarrie 简介 CyclicBarrier 初始化时可以传入构造器两个参数,一个int型的 parties表示参与者(线程)的数量. 另一个是一个Runnable,表示所有参与者重新执行之前要执行的任务. 参与者线程中调用CyclicBarrier的await()使得调用该方法的线程开始等 ...
阅读全文
-
第21章 – 并发 – BlcokingQueue
Mar182015第21章 – 并发 – BlcokingQueue 1. BlockingQueue简介 BlockingQueue 是一个接口.要求其实现是线程安全的. BlockingQueue 不接受 null 元素。试图 add、put 或 offer 一个 null 元素时, 某些实现会抛出 NullPointerException。null 被用作指示 poll 操作失败的警戒值。 &nb ...
阅读全文
-
第21章 – 并发 – 同步机制性能测试(Lock,synchronized,Atomic类)(P749)
Mar182015第21章 – 并发 – 同步机制性能测试(Lock,synchronized,Atomic类)(P749) 1. 由执行结果可知: Lock,synchronized,Atomic中,synchronized的性能最差,Atomic性能最好. 但是Atomic类只有在非常简单的情况下才有用,这些情况包括,你只有一个要被修改的Atomic对象, 并且这个对象独立于其他 ...
阅读全文