java多线程知识整理 本文不是入门篇,仅记录容易出错的知识点
为什么需要多线程
根本原因:
- 同一段时间尽量做更多的事;
- 充分发挥CPU的功能,避免浪费CPU资源;
- 同一时间需要做不同的事;
多线程的核心问题
-
对同一个变量的读写,导致脏写(数据库事务概念);
-
多个线程相互协作,如何通信,比如线程A依赖线程B的某个资源
如果没有特别的控制和机制,多个线程对同一个变量的读写,容易造成中间结果相互覆盖的情形,
类似于数据库事务中的脏写
有时线程A的执行需要线程B的某个资源,或者等线程B执行完某个操作之后,才能往下执行.
竞态条件
竞态条件,说得通俗一点,就是线程A 需要判断一个变量的状态,然后根据这个变量的状态来执行某个操作。 在执行这个操作之前,这个变量的状态可能会被其他线程修改。
参考:http://hw1287789687.iteye.com/blog/2007134
多线程争抢的是什么资源?
- CPU资源;
- lock(ownership of this monitor/object's monitor)
获取CPU资源,线程状态 从就绪状态进入运行状态;
获取 lock,则由blocked状态进入就绪(runnable)状态
容易弄混的
-
调用完wait()之后,会往下执行吗?
不会,会做两件事 (1) 释放锁;
(2)进入等待队列; -
线程A 先调用wait(),线程B 在同步代码块中调用 notifyAll(),线程A会马上执行吗? 不会.官网文档:
The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution
B线程调用notifyAll() 之后,线程A 从等待队列进入 锁池,等待获取同步锁,并不会马上执行.
- 可以任意执行wait()吗?
不可以,必须先获取锁,才有资格执行wait().
Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. In other words, this method behaves exactly as if it simply performs the call wait(0). The current thread must own this object's monitor.
哪些手段保证多线程的安全?
- 使用synchronized;
- 使用读写锁
总结
java 多线程安全机制和数据库事务的隔离级别 ,是一样的套路,
java中,同一个时间片,只允许一个线程进入同步代码块,来保证安全;
数据库事务中,通过共享读锁,排它锁,行级所,表级锁,来保证对于同一个表或同一行数据,只能有一个事务进入
参考:https://blog.csdn.net/evankaka/article/details/44153709
http://www.importnew.com/26850.html http://www.hollischuang.com/archives/943
https://my.oschina.net/huangweiindex/blog/1919895
相关推荐
Java多线程知识点整理.pdf
9. **线程安全的集合**:Java提供了一些线程安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`等,它们内部实现了线程同步,可以用于多线程环境。 10. **线程局部变量**:`ThreadLocal`类提供线程局部...
在实际开发中,理解并熟练掌握这些Java多线程知识对于编写高效、稳定且易于维护的并发代码至关重要。合理的线程管理和异常处理策略能够帮助开发者有效地处理并发环境中的错误和异常,确保程序的健壮性。此外,合理...
Java核心面试知识整理包括了对JVM内存区域、垃圾回收机制、GC算法、JVM类加载机制、Java集合框架以及Java IO/NIO等多个方面的深入讲解。以下是对这些知识点的详细介绍: JVM内存区域:JVM内存区域包括了程序计数器...
总之,Java多线程技术包括线程的创建、控制、同步与通信、线程池以及并发工具类的使用,掌握这些知识点能帮助开发者编写高效的并发程序。在实际开发中,合理使用线程池和并发工具类可以优化系统资源的使用,提高程序...
Java多线程和并发知识是Java开发中的重要组成部分,它涉及到如何高效地利用系统资源,尤其是在多核CPU环境下,合理地使用多线程可以显著提升应用程序的性能。 **1. 理论基础** 1.1 为什么需要多线程 多线程的引入...
本文档旨在为Java开发者提供一个 hệ thống的面试知识点整理,涵盖了Java的核心概念、JVM的工作原理、Java编程语言的基本语法和高级特性等多方面的知识点。下面是对该文档的详细解读。 JVM知识点 JVM(Java ...
Java多线程-多功能演示系统,连接MySQL数据库利用多线程实现信息交流,为教师提供教学服务,便于教师整理教学资料,整合所需知识内容,更好的为学生提供生动形象的理解方式,加强教师与学生之间的互动沟通。
下面将对Java多线程的相关知识点进行详细的阐述。 1. **线程的创建** - **继承Thread类**:通过创建一个新的Thread类的子类,并重写其`run()`方法,然后创建该子类的实例并调用`start()`方法启动线程。 - **实现...
总的来说,这个资源包提供了一个全面的学习路径,涵盖了Java多线程编程、GUI开发和事件处理等关键技能,并通过坦克大战这个游戏实例,让学习者有机会将理论知识付诸实践。对于想要提升Java编程能力,尤其是对游戏...
Java 断点续传技术是...总之,Java中的断点续传涉及了文件I/O、多线程编程和可能的网络通信,需要综合运用多种技术。通过合理的设计和实现,我们可以创建高效且可靠的断点续传功能,无论是在单线程还是多线程环境中。
本文档是一份关于Java核心面试知识的整理资料,内容涉及Java虚拟机(JVM)、Java内存模型、垃圾回收机制、Java IO/NIO、Java集合等多个关键知识点。通过对这些知识的梳理,能够帮助Java开发者更好地准备面试,同时也...
这份“JAVA核心面试知识整理-最全.zip”压缩包提供了全面的Java面试准备材料,涵盖了Java基础、Java虚拟机(JVM)、多线程并发以及算法和Java中间件等多个关键领域。 首先,让我们深入Java基础。这部分通常包括Java...
这份《43道Java多线程高频题整理(附答案背诵版)》资源是一份专门针对Java多线程编程的高频考题集,旨在帮助Java开发者系统掌握多线程的核心概念和实际应用。此资源涵盖了面试和工作中常见的多线程问题,通过详细的...
对java工程师面试的常见题目进行汇总。java虚拟机、java集合、java多线程并发、java基础、SPRING原理、微服务、NETTY、RPC、网络、日志、zookeeper、kafka、rabbitmq、hbase等内容
6. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口和并发包(java.util.concurrent)。学习如何创建和管理线程,以及同步机制(如synchronized关键字、锁对象和wait/notify机制)是多线程编程...
Java多线程允许程序同时执行多个独立的线程,从而提高计算机系统的资源利用率和程序的响应速度。Java提供了两种创建线程的方式:通过实现`Runnable`接口或继承`Thread`类。实现`Runnable`接口更为灵活,因为Java不...
对于并发和多线程,Java提供了丰富的API和工具,如线程池、同步机制(如synchronized关键字和Lock接口)、并发集合类等。这部分内容将帮助你理解和解决多线程环境中的问题,提升程序的执行效率。 在内存管理和性能...