最近在看java编程思想的并发 这一章。感觉挺深奥的。 也可能是我太笨了。
所以记录下笔记。一是检验自己是否真正理解,二是以后复习用。
所谓共享资源竞争,就好像是你坐着在餐桌前拿着筷子 刚抬手准备去夹最后一块肉。
可就在你马上就要夹到得同时,肉没了。 是坐着你旁边的其他人 夹走了。
这就相当于并发里的共享资源竞争。我们要防止这种两个任务访问相同的资源的行为。
再说下 锁机制:
bruce大神 做出的 比喻很好。
很多人在浴室前准备洗澡。 第一个人先进去洗澡,锁上门。其他人进不去,只有等第一个人洗完了之后其他人才能进去。 理论由于线程的不确定性,谁离门进谁去第二个进去洗。根据yield()和setPriority()来这设置。
但是因为JVM 和系统机制不同。实际情况可能有不同
最后说下 synchronized:
之前不是太了解并发的东西,在看别人写的代码 总是以为synchronized是针对方法级别来说的。 但是现在发现自己一直理解错了。。 哎 摸石头过河害死人啊
例如
class Test{
synchronized void f();
synchronized void g();
}
当线程1 调用f()的时候 那么线程2 必须要等线程1 调用f()结束后获得其返回值,才能调用同样加了synchronized标记的g()方法。
分享到:
相关推荐
本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...
- **锁机制**:如synchronized和Lock,用于保护共享资源,防止数据不一致。 - **并发容器**:如ConcurrentHashMap、CopyOnWriteArrayList等,它们内部实现了线程安全,减少锁的使用。 - **非阻塞并发**:使用CAS...
7. Java内置锁和锁的粒度:Java中的`synchronized`关键字用于实现内置锁,它保证了线程对共享资源的互斥访问。关于锁的粒度,需要根据实际情况来决定是使用细粒度还是粗粒度的锁。使用同步时,需要考虑代码同步块的...
### Java并发编程与高并发解决方案知识点总结 #### 一、并发与高并发基本概念 ##### 1.1 并发 - **定义**: 指一个程序在同一时刻拥有两个或更多的线程,这些线程可以在单核或多核处理器上运行。 - **单核处理器上...
当我们谈论“笔记-7、并发安全1”时,主要是探讨如何在Java等多线程编程语言中确保类或对象在被多个线程访问时的正确性和一致性。 **类的线程安全定义** 线程安全意味着一个类或者对象在被多个线程并发访问时,仍然...
锁是同步的一种机制,用来控制多个线程访问共享资源的顺序。在Java中,锁主要有两种类型:内置锁和显示锁。内置锁使用synchronized关键字实现,而显示锁则是通过java.util.concurrent.locks.Lock接口实现。...
本笔记将深入探讨Java的基础知识和核心概念。 1. **Java基础** - **语法**:Java语法与C++类似,但更加简洁。例如,Java使用垃圾回收机制自动管理内存,避免了C++中的内存泄漏问题。 - **类与对象**:Java是面向...
### CVS技术笔记-Leisure.pdf 知识点概览 #### 1. CVS简介 CVS (Concurrent Versions System) 是一款开源的版本控制系统,主要用于跟踪和管理文件的变化历史。它可以帮助开发者保存每个版本的文件,使得团队成员...
临界区通常用于保护共享资源或数据结构,确保对共享资源的正确访问和一致性。 - **应用场景**:例如,一个共享变量或共享数据结构在多线程环境中需要被多个线程读写。为了保证数据的一致性和完整性,每次只能有一个...
3. **锁机制**:如互斥锁、读写锁等,用于保护共享资源,避免数据竞争问题。 4. **并行计算**:利用多核处理器,对大任务进行拆分,各部分并行计算后合并结果。 并发处理中的挑战主要包括死锁、竞态条件和活锁等...
- **资源占用少**:对于资源有限的嵌入式系统而言,Linux提供了轻量级的解决方案。 - **社区支持**:庞大的开发者社区为Linux提供了强大的技术支持和丰富的资源。 #### 四、Ubuntu安装与文件管理 - **安装指南**:...
Java并发编程的核心在于正确处理共享资源的访问问题,避免出现数据不一致的情况。 #### 二、Java线程池(`ThreadPool`)原理 线程池是一种基于池化技术的线程管理方法,它可以复用预先创建好的线程,减少线程创建...
- **线程同步**:利用`Mutex`、`Semaphore`、`CriticalSection`等同步原语防止数据竞争,确保线程安全地访问共享资源。 - **线程通信**:通过`WaitForSingleObject`和`WaitForMultipleObjects`实现线程间的等待和...
《良葛格 Java 学习笔记-JavaGossip全(v1+v2)》作为网络共享资源,不仅提供了丰富的学习材料,也体现了开源和分享的精神,为Java开发者们提供了一个宝贵的交流平台。通过系统学习,读者可以逐步提升自己的编程技能...
- **共享**:多个任务可以共享系统中的资源,如内存、处理器时间等。 - **虚拟**:操作系统可以将物理资源虚拟化,如虚拟内存技术。 - **异步**:任务之间的执行没有固定的时间顺序。 #### 二、进程与线程管理 ...
在Java并发编程中,显式锁(Lock)和隐式锁(synchronized)是两种常见的锁机制,它们提供了对共享资源的互斥访问。显式锁通过Java的Lock接口实现,而隐式锁主要依赖于synchronized关键字。 **Lock接口和...
- **竞争条件**:当多个线程同时访问和修改一个共享资源,可能会导致不一致的结果,这就是竞态条件。避免竞态条件通常需要使用锁或其他同步机制。 - **懒加载的单例模式**:如果不妥善处理,可能在多线程环境下...
- **死锁** 是两个或多个线程相互等待对方释放资源,导致所有线程都无法继续执行的状态,需要避免和解决。 8. **并发设计原则** - **最小化锁的使用** 减少锁的使用可以降低线程间的竞争,提高并发性能。 - **...
并发是指多个任务可以同时执行,共享是指多个任务可以共享同一个资源,虚拟是指操作系统提供的虚拟环境,异步是指任务可以并发或并行地执行。 操作系统的发展历史可以分为实时操作系统、网络操作系统、分布式操作...
并发和共享相互依赖,没有并发就没有资源的共享,而有效的资源共享管理又是并发执行的基础。 多道程序设计是实现并发执行的一种方法,它使得不同速度的程序可以在同一硬件上并发执行,但可能导致程序执行的非确定性...