`

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中的线程知识点整理

    强烈推荐,经经验丰富的老师总结的JAVA线程的有关知识点。。

    JAVA核心知识点整理.pdf

    JAVA核心知识点整理.pdf 整理了java开发中比较重要的知识点,对java开发有很大的帮助!主要介绍了 JVM,JAVA集合,多线程,Spring原理,微服务,Zookeeper等...

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

    Java核心面试知识整理包含Java基础,Java虚拟机,多线程并发,算法,各种Java中间件

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

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

    Java多线程和并发知识整理

    1.1为什么需要多线程 1.2不安全示例 1.3并发问题的根源 1.4JMM 1.5线程安全的分类 1.6线程安全的方法 二、线程基础 2.1状态 2.2使用方式 2.3基础机制 2.4中断 2.5互斥同步 2.6线程合作 三、...

    java核心面试知识整理.pdf

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

    280多页超详细的JAVA核心知识点整理 包含了JVM、java集合、多线程并发、java基础、spring生态原理、微服务等等

    包含了JVM、java集合、多线程并发、java基础、spring生态原理、微服务、设计模式、NETTY与RPC、网络、日志、ZOOKEEPER、KAFKA、RABBITMQ、HBASE、MONGDB、CASSANDRA、负载均衡、数据库、一致性算法、java算法、数据...

    JAVA核心知识点整理-283页

    283页,JAVA核心知识点整理: JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring、微服务、NETTY/RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、设计模式、负载均衡、......

    JAVA核心知识点整理.zip

    4. JAVA 多线程并发 5. JAVA 基础 5.1JAVA 异常分类及处理 5.2JAVA 反射 5.3JAVA 注解 5.4JAVA 内部类 5.5JAVA 泛型 5.6JAVA 序列化(创建可复用的 Java 对象) 5.7JAVA 复制 6. Spring 原理

    JAVA核心面试知识整理

    【全面整理而且有用!10M大小的文档整理非常有用!适合面试的人群迅速找到工作】JAVA核心面试知识整理,基础之数据结构与算法设计模式多线程与并发JVM内核

    JAVA核心知识点整理,涵盖JAVA基础、集合类、JVM、IO/NIO、多线程、Spring原理等知识

    JAVA核心知识点整理,涵盖JAVA基础、集合类、JVM、IO/NIO、多线程、Spring原理等知识。

    JAVA核心面试知识整理.pdf

    一篇Java进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、...

    java核心知识点整理

    java详细的知识点整理,包括:jvm原理、IO、类加载过程、集合、线程、反射、泛型等java基础,spring原理、特点,微服务架构、数据库引擎、消息组件、算法、数据结构等。偏理论的知识较多,主要用于面试。

    JAVA高级知识点整理.rar

    Java高级技术整理,包含多线程、虚拟机、JAVA IO/NIO 、Java集合 等高级进阶知识点

    【BAT必备】Java全部核心知识点整理

    2020年最新Java面试题整理,全网最全一份,包含各个技术栈,Java基础,Java集合,多线程,Java异常,spring,spring MVC,spring boot,spring cloud,netty,dubbo,activemq,Java web,jvm,kafka,MongoDB,...

Global site tag (gtag.js) - Google Analytics