Java学习笔记Java 杂谈

Java Concurrency

2017-07-16  本文已影响20人  riveraiyanzi

并发模型和分布式系统的相似性

并发系统中有多个线程在协同工作,而分布式系统是多个进程在协同工作,这些进程可能分布在不同的计算机上。线程和进程本身有许多相似之处。因为他们的相似性,所以它们经常相互借鉴思想。

Java 开启新进程

然后调用实例的 start 方法

Race Conditions and Critical Sections

竞争情形和关键区。有些代码段如果同时被多个线程执行时,可能会因为线程执行顺序的不同而结果不同,称为关键区,关键区出现这种结果不同的情况称为关键区有竞争情形。这避免出现这种情况,可以用 synchronized block of Java code, locks or atomic variables 等线程同步的方法。为了增大并发量,应尽量把关键区缩小。

Thread Safety and Shared Resources

不会发生竞争情形的代码是线程安全的。竞争情形只发生在有共享资源的情况下。所以要搞清楚什么情况下有竞争情形就要知道 Java 中有哪些共享资源。

Thread Safety and Immutability

竞争情形只发生在多线程访问相同的资源,而且一个或多个进程写资源的情况。所以另一种线程安全策略就是让共享的资源只能读不能写。

Java Memory Model

讲了 Java 的内存模型,以及硬件的存储结构(多级缓存)。这就导致了两个主要的问题。

线程信号

怎么实现线程之间通信呢?通过共享对象。一个对象的 wait notiy 方法

饥饿和公平

通常有三种情况引起线程饥饿

  1. Threads with high priority swallow all CPU time from threads with lower priority.

  2. Threads are blocked indefinately waiting to enter a synchronized block, because other threads are constantly allowed access before it.

  3. Threads waiting on an object (called wait() on it) remain waiting indefinitely because other threads are constantly awakened instead of it.

然后作者在里引出了公平的概念。他所实现的 lock 类,内部有一个队列来保证先后顺序。改进了 synchronized 不公平的问题。看到这里明白了为什么 concurrent 包里要设计 locks 了吧。

Reentrance Lockout

选择有可重入性的锁,如果锁没有可重入性就要避免在锁里面再要锁

上一篇下一篇

猜你喜欢

热点阅读