`
oojdon
  • 浏览: 40761 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java Concurrency In Practice 小小笔记

阅读更多

可伸缩性:指的是一个应用程序在工作负载和可用处理资源增加时其吞吐量的表现情况。一个可伸缩的程序能够通过使用更多的处理器、内存或者I/O带宽来相应地处理更大的工作负载


进程:资源利用,公平,方便这些因素操作系统支持多进程同时执行,进程是操作系统分配资源的单位,比如内存,文件句柄,安全证书,进程间通信有Socket,信号处理,共享内存,信号量,消息传递和文件。

 

线程:相同的因素也促进了进程多分支执行,这些分支就是线程,线程共享所属进程的资源,比如内存,文件句柄,每一个线程都有自己的程序计数器,堆栈,线程是操作系统的时序调度单元。

 

线程优点:使用多处理器,模型的简化,异步事件的简单处理,用户界面响应更佳。

 

线程风险:安全风险(竞争条件),活跃度危险(死锁,饥饿,活锁),性能危险(上下文切换,同步,锁定,内存刷新,限制编译器优化)。

 

线程安全:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么称这个类是线程安全的。

 

锁:锁方法和锁代码块,可重入(每个锁会关联请求技术和占有者),保证可见和互斥

 

volatile变量:保证可见,不保证原子(使用原则是没有状态依赖,依赖自己和依赖别人)

 

Java的线程API抽象:实现Runnable接口,然后把这个类的实例传入Thread的构造函数,调用Thread.start().

Runnable只是一个不能返回结果和抛异常的任务抽象,Java5并发包所以提供了CallableFuture

 

无限制创建线程缺点:管理线程生命周期的开销,资源消耗量,稳定性。

 

Executor框架:将并行任务抽象为Runnable,然后提交给执行器接口,执行器可以替换,不同执行器不同的执行策略,ExecutorService扩展Executor接口,提供生命周期方法。

newCachedThreadPool:根据需要创建线程的线程池

newFixedThreadPool:固定线程数的线程池

newScheduledThreadPool:定期执行的线程池

newSingleThreadExecutor:单线程执行器

 

 

这本书读到最后,发现,我靠,原来并发编程是可以无锁的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics