`

java多线程知识整理

    博客分类:
  • Java
阅读更多

 

java多线程知识整理 本文不是入门篇,仅记录容易出错的知识点

为什么需要多线程

根本原因:

  1. 同一段时间尽量做更多的事;
  2. 充分发挥CPU的功能,避免浪费CPU资源;
  3. 同一时间需要做不同的事;

多线程的核心问题

  1. 对同一个变量的读写,导致脏写(数据库事务概念);

  2. 多个线程相互协作,如何通信,比如线程A依赖线程B的某个资源

如果没有特别的控制和机制,多个线程对同一个变量的读写,容易造成中间结果相互覆盖的情形,

类似于数据库事务中的脏写

有时线程A的执行需要线程B的某个资源,或者等线程B执行完某个操作之后,才能往下执行.

竞态条件

竞态条件,说得通俗一点,就是线程A 需要判断一个变量的状态,然后根据这个变量的状态来执行某个操作。 在执行这个操作之前,这个变量的状态可能会被其他线程修改。

参考:http://hw1287789687.iteye.com/blog/2007134

多线程争抢的是什么资源?

  1. CPU资源;
  2. lock(ownership of this monitor/object's monitor)

获取CPU资源,线程状态 从就绪状态进入运行状态;

获取 lock,则由blocked状态进入就绪(runnable)状态

容易弄混的

  1. 调用完wait()之后,会往下执行吗?
    不会,会做两件事 (1) 释放锁;
    (2)进入等待队列;

  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 从等待队列进入 锁池,等待获取同步锁,并不会马上执行.

  1. 可以任意执行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.

哪些手段保证多线程的安全?

  1. 使用synchronized;
  2. 使用读写锁

总结

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

0
0
分享到:
评论

相关推荐

    Java多线程知识点整理.pdf

    Java多线程知识点整理.pdf

    JAVA中的线程知识点整理

    9. **线程安全的集合**:Java提供了一些线程安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`等,它们内部实现了线程同步,可以用于多线程环境。 10. **线程局部变量**:`ThreadLocal`类提供线程局部...

    Java多线程的其他知识_动力节点Java学院整理

    在实际开发中,理解并熟练掌握这些Java多线程知识对于编写高效、稳定且易于维护的并发代码至关重要。合理的线程管理和异常处理策略能够帮助开发者有效地处理并发环境中的错误和异常,确保程序的健壮性。此外,合理...

    JAVA核心面试知识整理.pdf

    Java核心面试知识整理包括了对JVM内存区域、垃圾回收机制、GC算法、JVM类加载机制、Java集合框架以及Java IO/NIO等多个方面的深入讲解。以下是对这些知识点的详细介绍: JVM内存区域:JVM内存区域包括了程序计数器...

    java多线程技术整理

    总之,Java多线程技术包括线程的创建、控制、同步与通信、线程池以及并发工具类的使用,掌握这些知识点能帮助开发者编写高效的并发程序。在实际开发中,合理使用线程池和并发工具类可以优化系统资源的使用,提高程序...

    Java多线程和并发知识整理

    Java多线程和并发知识是Java开发中的重要组成部分,它涉及到如何高效地利用系统资源,尤其是在多核CPU环境下,合理地使用多线程可以显著提升应用程序的性能。 **1. 理论基础** 1.1 为什么需要多线程 多线程的引入...

    JAVA面试核心知识点整理(283页).pdf

    本文档旨在为Java开发者提供一个 hệ thống的面试知识点整理,涵盖了Java的核心概念、JVM的工作原理、Java编程语言的基本语法和高级特性等多方面的知识点。下面是对该文档的详细解读。 JVM知识点 JVM(Java ...

    Java多线程-多功能演示系统.zip

    Java多线程-多功能演示系统,连接MySQL数据库利用多线程实现信息交流,为教师提供教学服务,便于教师整理教学资料,整合所需知识内容,更好的为学生提供生动形象的理解方式,加强教师与学生之间的互动沟通。

    java多线程相关资料整理

    下面将对Java多线程的相关知识点进行详细的阐述。 1. **线程的创建** - **继承Thread类**:通过创建一个新的Thread类的子类,并重写其`run()`方法,然后创建该子类的实例并调用`start()`方法启动线程。 - **实现...

    java+多线程+界面编程+事件监听+坦克大战源码整理

    总的来说,这个资源包提供了一个全面的学习路径,涵盖了Java多线程编程、GUI开发和事件处理等关键技能,并通过坦克大战这个游戏实例,让学习者有机会将理论知识付诸实践。对于想要提升Java编程能力,尤其是对游戏...

    java断点续传,刚刚整理出来多线程处理

    Java 断点续传技术是...总之,Java中的断点续传涉及了文件I/O、多线程编程和可能的网络通信,需要综合运用多种技术。通过合理的设计和实现,我们可以创建高效且可靠的断点续传功能,无论是在单线程还是多线程环境中。

    Java核心面试知识整理.pdf

    本文档是一份关于Java核心面试知识的整理资料,内容涉及Java虚拟机(JVM)、Java内存模型、垃圾回收机制、Java IO/NIO、Java集合等多个关键知识点。通过对这些知识的梳理,能够帮助Java开发者更好地准备面试,同时也...

    JAVA核心面试知识整理-最全.zip

    这份“JAVA核心面试知识整理-最全.zip”压缩包提供了全面的Java面试准备材料,涵盖了Java基础、Java虚拟机(JVM)、多线程并发以及算法和Java中间件等多个关键领域。 首先,让我们深入Java基础。这部分通常包括Java...

    43道Java多线程高频题整理(附答案背诵版).md

    这份《43道Java多线程高频题整理(附答案背诵版)》资源是一份专门针对Java多线程编程的高频考题集,旨在帮助Java开发者系统掌握多线程的核心概念和实际应用。此资源涵盖了面试和工作中常见的多线程问题,通过详细的...

    java核心面试知识整理.pdf

    对java工程师面试的常见题目进行汇总。java虚拟机、java集合、java多线程并发、java基础、SPRING原理、微服务、NETTY、RPC、网络、日志、zookeeper、kafka、rabbitmq、hbase等内容

    JAVA核心知识点整理.pdf

    Java是一种广泛使用的面向对象编程语言,其核心特性之一就是多态性。多态性赋予了Java代码灵活性和可扩展性,使得程序可以处理多种不同类型的对象而无需知道具体...在实际开发中,这些知识点是Java程序员必备的基础。

    JAVA核心知识点整理.zip

    6. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口和并发包(java.util.concurrent)。学习如何创建和管理线程,以及同步机制(如synchronized关键字、锁对象和wait/notify机制)是多线程编程...

    java+多线程+同步详解源码整理

    Java多线程允许程序同时执行多个独立的线程,从而提高计算机系统的资源利用率和程序的响应速度。Java提供了两种创建线程的方式:通过实现`Runnable`接口或继承`Thread`类。实现`Runnable`接口更为灵活,因为Java不...

Global site tag (gtag.js) - Google Analytics