读书人

10/18/2011 - Thread 相干

发布时间: 2012-10-12 10:17:04 作者: rapoo

10/18/2011 - Thread 相关
1. 进程是资源的占有者,线程是资源的使用者。
2. 进程本身不能执行,它只是一个资源的集合体,拥有地址空间,模块,内存。
3. 线程是真正的执行单元,一个进程如果没有线程,那么就没有存在的意义,因为不可能执行。
------------------------ 我是分割线 ----------------------------------
4. 线程池:
a) 创建线程目标对象,其实就是Runnable对象
b) 使用Executors创建线程池,返回一个ExecutorService类型的对象
c) 使用线程池执行线程目标对象,即:exec.execute(run);
d) 最后线程池结束线程,exec.shutdown().
------------------------ 我是分割线 ----------------------------------
5. volatile 可以安全的替代锁的两个条件:
a) 对变量的写操作不依赖于当前值。
b) 该变量没有包含在具有其他变量的不变式中。
如:
针对条件1,i++ i-- 这样的操作是不能用volatile 替代
针对条件2,if (volatileVar > num) 这样的形式也不能用volatile 替代锁
------------------------ 我是分割线 ----------------------------------
6. ThreadLocal 会为每一个线程提供一个独立的变量副本. 每个线程在使用ThreadLocal 变量的get方法的时候都会先执行initialValue()方法, 如果先执行了set方法就不会再执行initialValue()方法。如果程序员希望将ThreadLocal 变量初始化为 null 以外的某个值则必须实现initialValue()方法。
对于每个线程ThreadLocal变量不存在影响他们之间协作的状态,为每个线程创建一个ThreadLocal变量的拷贝或者叫做副本。
------------------------ 我是分割线 ----------------------------------
7. 同步机制采用了“以时间换空间”的方式,而 ThreadLocal 采用了“以空间换时间”的方式。
------------------------ 我是分割线 ----------------------------------
8. Concurrent 包下面主要提供了一些线程安全的数据结构,最经典的就是 生产者-消费者 问题 用阻塞队列的实现。 ArrayBlockingQueue / LinkedBlockingQueue. 还有就是Map 与 ConcurrentMap, ConcurrentMap的所有方法都是原子的。 比如: Map中得 put 方法对应的方法是 putIfAbsent.
------------------------ 我是分割线 ----------------------------------







读书人网 >编程

热点推荐