zoukankan      html  css  js  c++  java
  • 【JAVA SE基础篇】58.线程并发的非同步、同步与锁机制

    并发:用同一个对象多个线程同时操作

    1.线程并发非同步

     

     

    2.线程并发同步

    同一个资源多人使用会发生并发问题

    处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要”线程同步“。

    线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列

    等待前面的线程使用完毕后,下一个线程再使用

    线程同步的两个条件:

    1.形成队列

    2.加入锁机制

    3.锁机制

    由于同一进程的多个线程共享同一块存储空间,在带来方便的同时也带来了访问冲突的问题。

    为了保证数据在方法中被访问时的正确性,在访问时加入了锁机制(synchronized),当一个线程获得对象的排他锁

    独占资源,其他线程必须等待,使用后释放锁即可。

    注:

      1.一个线程持有锁会导致其他所有需要此锁的线程挂起

      2.在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题

      3.如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能问题

      4.锁机制锁的是对象是资源

    由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,

    包括两种用法:synchronized方法和synchronized块。

    同步方法:public synchronized void metho(int args){}

    synchronized方法控制对”成员变量|类变量“对象的访问:每个对象对应一个锁,每个synchronized方法都必须获得调用该方法

    的对象的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,

    此后被阻塞的线程方能获得该锁,重新进入可执行状态。

    注:

      若将一个大的方法声明为synchronized将会大大影响效率

  • 相关阅读:
    vue-router 滚动行为封装示例
    HTML5 History 模式 后端ngnix配置
    vue-router 嵌套命名视图
    npm 源管理 nrm
    windows系统git使用zip命令报错解决方法
    vue v-html 动态内容样式无效解决方法
    vue 项目打包 本地预览
    Vue 项目环境变量
    Oracle中的统计信息
    宽表和窄表的区别---字段
  • 原文地址:https://www.cnblogs.com/chengkuan/p/13329425.html
Copyright © 2011-2022 走看看