第三章 对象的共享
1,同步锁
1,描述实现原子性或边界区
2,内存可见性 保证数据一致
2,volatile 稍弱的同步机制 开销介于普通代码与synchronize之间
写入volatile变量表示跳出同步代码块,读取volatile变量表示进入同步代码块 作用类似缩减synchronize范围
jvm需要设置为-server模式 不建议使用
3,发布与溢出
内部类获取外部类的引用方法: [OutClass].this
4,发布和溢出
出于某种原因,使某对象在其作用域(private、default、protected、public)之外可以被访问到叫做发布。
public:所有的
protected:自己包中的+其他包的子类
default(package—private):自己包的,也称作包权限
private:自己的类
当某一个不应该被发布的对象被发布时,称作溢出(Escape)。
Escape是一种破坏封装的不安全行为。
5,线程封闭 不在线程间共享数据即线程封闭
栈封闭 某个方法内全部为局部变量
ThreadLocal
不变性 final
第四章 对象的组合
1,设计线程安全的类
2,实例封闭
将一个实例封闭在另一个类中,通过线程安全锁来保证对此实例的访问时线程安全的,且保证不能将实例发布
3,委托:
将非线程安全委托给线程安全
java.util.concurrent.ConcurrentMap 线程安全map
Map<String, String> map = new HashMap();创建非线程安全map
map.put("1", "1");
map.put("2", "2");
System.out.println(map);
Map<String, String> map1 = Collections.unmodifiableMap(map);
创建不可修改视图map1
map1不可修改 修改抛出UnsupportedException
map可以修改 修改后可以体现在map1只读视图中
CopyOnWrite 写时复制 懒惰编程 保证线程安全,弱一致性
委托失效情况?
4,在现有的线程安全类中添加功能
1,继承
2,客户端加锁
第五章 基础构建模块
1,同步容器类
线程安全基础模块
即时使用线程安全基础组件,在多线程进行类似 如果不存在则插入putIfAbsent的操作同样是非线程安全的 同样需要加锁
2,并发容器
CurrentHashMap 并不是将每个方法都加锁 而是使用
分段锁(Lock Striping) 所以不能保证绝对一致 而是在权衡并发吞吐量、单线程性能情况下的相对一致性产物,其size()\isEmpty()也是当时状态的估算值,而非绝对准确值
CurrentHashMap完全并发读操作可以不加锁,支持一定量的并发写。内置类似putIfAbsent的方法
CopyOnWriteArrayList 写入时复制 建议用于迭代操作远远多于修改操作时(每次修改容器时都会复制底层数组)
3,阻塞队列和生产者-消费者模式
BlockingQueue
实现:
LinkedBlockingQueue
ArrayBlockingQueue
SynchronousQueue??
java6 Deque BlockingDeque双向对象 双向阻塞队列
工作密取?
4,阻塞方法与中断方法
恢复中断状态以避免屏蔽中断
try{
Thread.sleep(10);
}catch(InterruptedException ex){
Thread.currentThread().interrupt();
}
5,同步工具类
CountDownLatch await() countdown()
FutureTask Callable(call方法含返回值,泛型)
Semaphore信号量
Semaphore semaphore = new Semaphore(count);
semaphore.acquire();//获取 如果目前已经为0,那么acquire()阻塞
semaphore.release();//释放
Barrier栅栏
6,构建高效可伸缩的结果缓存
分享到:
相关推荐
在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...
"java高并发.txt"可能是一份文档或笔记,涵盖了Java并发编程的核心概念和技术。它可能详细解释了线程的生命周期、线程安全问题(如数据竞争、活锁、死锁)、并发工具类(如CountDownLatch、CyclicBarrier、Semaphore...
《Java并发编程实战》是一本深入探讨Java多线程和并发编程的经典著作,它为开发者提供了全面、实用的指导,帮助他们理解和解决并发问题。这本书的中文版使得更多的中国开发者能够受益于其丰富的知识和实践经验。 ...
《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,试读版提供了前两章的内容,为读者提供了一个初步了解并发编程基础的窗口。在Java领域,并发编程是构建高性能、高效率系统的关键技术,对于软件开发...
### Java多线程文章系列知识点概述 #### 一、Java多线程编程...以上是《Java多线程文章系列》的主要知识点概述,涵盖了从多线程的基础概念到高级应用,希望能帮助读者深入理解Java多线程编程的核心技术和实践技巧。
在IT领域,多线程是并发编程中的一个关键概念,特别是在Java这样的多线程支持语言中。马士兵是一位知名的IT教育专家,他的多线程训练营笔记深入浅出地讲解了这一主题,帮助开发者理解并掌握多线程的精髓。 多线程...
10. **多线程**:Java提供了丰富的API支持并发编程,如Thread、Runnable接口,以及synchronized关键字,笔记可能涉及到线程的创建、同步和通信。 11. **枚举与注解**:枚举是Java中的特殊数据类型,而注解则是一种...
这篇“Java线程编程学习笔记(二)”很可能是对Java并发编程深入探讨的一部分,特别是涉及多线程示例的实践应用。我们将从标题、描述以及标签来推测可能涵盖的知识点,并结合"Multi-Threads Demo"这一压缩包文件名来...
异常处理是JAVA中的重要安全机制,集合框架是存储和操作数据的主要工具,IO流用于文件操作和数据传输,多线程则可以实现程序的并发执行,网络编程则是开发分布式应用的基础,反射提供了运行时动态操作类和对象的能力...
6. **多线程**:Java支持多线程编程,使得程序可以同时执行多个任务。笔记会解释线程的创建、同步和通信,包括synchronized关键字、wait/notify机制、ThreadLocal等。 7. **反射与注解**:反射允许在运行时检查类、...
11. **案例分析与实战**:笔记可能包含实际的并发编程案例,帮助读者更好地将理论知识应用到实践中。 通过深入学习这份"Java并发实践-学习笔记",开发者能够提升自己在处理多线程和并发问题上的能力,从而设计出更...
10. **多线程**:线程的创建方式,线程同步,线程池,以及并发工具类。 11. **反射机制**:如何在运行时获取类的信息,创建和操作对象,调用方法。 12. **网络编程**:套接字编程,服务器端和客户端的建立连接,...
5. **多线程**:Java内置了强大的多线程支持,笔记会讲述如何创建和管理线程,以及同步机制如synchronized关键字和wait/notify方法,帮助开发者理解和实现并发程序。 6. **网络编程**:Java提供了丰富的网络编程API...
多线程和IO流则涉及并发编程和数据读写,对于高性能的Web应用至关重要。 其次,Java-Web笔记进一步讲解了Servlet、JSP、过滤器、监听器等Java Web开发的核心技术。Servlet是Java Web应用的基础,用于接收和响应HTTP...
Java多线程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提高..."Java多线程源码笔记.pdf"这样的文档通常会涵盖以上内容,并可能包含具体的源码分析和实战案例,对于理解和掌握Java多线程编程非常有帮助。
Java的多线程能力使得它在并发编程中表现出色。笔记涵盖了线程的创建、同步、并发工具类如Semaphore、CountDownLatch,以及线程池的使用。理解这部分内容可以提高程序的并行性和性能。 七、反射与注解 Java反射机制...
《良葛格的Java学习笔记》是一本专为Java初学者设计的教程,作者林信良深入浅出地讲解了Java编程的基础知识。这本笔记覆盖了Java学习的重要概念,包括但不限于以下几个方面: 1. **Java简介**:Java是一种跨平台、...
此外,还会涉及多线程编程,这是并发处理和提高程序性能的关键技术,包括线程的创建、同步和通信。 在高级主题中,读者将接触到Java的反射机制,允许程序在运行时动态地获取类的信息并调用其方法。此外,还有注解...
总结,"达内教育 Java从入门到高级全套课堂笔记"应该包含了这些知识点的详细讲解,帮助学习者系统地学习Java编程,从基础知识到高级特性和实战应用,全面提高编程能力。通过深入学习和实践,你可以成为一名熟练的...
6. **多线程**:Java内置对多线程的支持,包括Thread类和Runnable接口。理解和掌握线程同步、互斥以及并发控制(如synchronized关键字、wait/notify机制)是提升程序性能的关键。 7. **IO流**:Java的IO流系统用于...