zoukankan      html  css  js  c++  java
  • 浅谈线程同步的几种方法

    一、为何要使用同步

      同步是多线程中的重要概念。同步的使用可以保证在多线程运行的环境中,程序不会产生设计之外的错误结果。

      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 

      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。

    二、同步的几种方法

      1,同步代码块 

            即有synchronized关键字修饰的语句块。 被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
      2,同步方法
         即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
      3,使用特殊域变量(volatile)实现线程同步
            a:volatile关键字为域变量的访问提供了一种免锁机制, 
            b:使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新, 
            c:因此每次使用该域就要重新计算,而不是使用寄存器中的值 
            d:volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
          其他代码不变,只需要在定义变量的时候用volatile
      4,使用wait(),notify(),notifyAll()实现线程同步
        wait()必须在有synchronized修饰的地方使用,  调用wait()后线程放弃锁,进入等待,调用notify(),notifyAll()唤醒线程;
      5,sleep()使线程进入阻塞状态
        不是严格意义上的同步方法,但在一些特殊场景下可以进行同步应用
     
     
     
  • 相关阅读:
    Python超简单的HTTP服务器
    浅析python的string.Template
    virtualenv python虚拟环境搭建
    python 爬虫-sohu抓小说
    python RE模块
    linux 修改系统时间
    Linux下查看文件和文件夹大小
    python os模块使用方法
    python文件操作 seek(),tell()
    python encode decode unicode区别及用法
  • 原文地址:https://www.cnblogs.com/muzilee/p/7061548.html
Copyright © 2011-2022 走看看