• Java基础回顾 —线程同步详解


    1. 停止线程的方式:
      不能使用Thread类的stop方法来终止线程的执行,一般要设定一个变量,在run方法中是一个循环,循环每次检查该变量,如果满足条件则继续执行,否则跳出循环,线程结束。
    2. 不能依靠线程的优先级来决定线程的执行顺序
      通过实现Runnable接口的多线程类,该类的属性会被多个线程共享,就会导致资源同步的问题。如果多个任务以一种会引起冲突的方式访问一个公共的资源,称为竞争状态。如果一个类的对象在多线程程序中没有导致竞争状态,则称这样的类为线程安全的
    3. synchronized关键字
      当修饰一个方法时,该方法叫做同步方法。
    4. java中的每个对象都有一个锁lock,或者叫做监视器monitor,当访问某个对象的synchronized方法时, 表示将该对象上锁, 此时其他线程都无法访问该对象的synchronized方法,知道之前那个线程执行方法完毕后或者抛出了异常,那么该对象的锁会释放,其他线程才有可能再去访问该synchronized方法。
    5. 如果一个对象有多个synchronized方法,在某个时刻线程已经进入了某个synchronized方法,那么在该方法没执行完之前,其他线程无法访问该对象的任何synchronized方法
    6. 如果某个synchronized方法是static的,那么当线程访问该方法时,它锁的不是synchronized所在的对象,而是synchronized方法所在对象对应的Class对象,因为java中无论一个类有多少个对象,这些对象会对应唯一一个Class对象,因此当线程访问同一个类的两个对象的两个static、synchronized方法,他们也是顺序执行,也就是一个线程先执行方法,完成后另一个线程才开始执行。
    7. synchronized块,写法:
      synchronized(Object){}: 表示线程在执行的时候会对Object对象上锁。
      synchronized(this){}: 表示线程在执行的时候会对当前对象上锁。
    8. synchronized方法时粗粒度的并发控制,某一时刻只能有一个线程执行该synchronized方法。
      synchronized块则是一种细粒度的并发控制,只会讲块中的代码同步,位于方法内、synchronized块之外的代码可以被多个线程同时访问到。
  • 相关阅读:
    POI向Excel的单元格中写入图片
    POI导出excel提示ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils
    POI设置Excel单元格样式
    MySQL数据库删除重复数据
    NAVICAT FOR MYSQL 快捷键
    【Eclipse】系统切换JDK版本后,Eclipse中出现JDK版本不一致的错误
    jxl导入Excel文件抛出java.lang.StringIndexOutOfBoundsException异常
    MySQL数据库
    jquery DOM操作
    触发事件
  • 原文地址:https://www.cnblogs.com/nextStep/p/6691299.html
Copyright © 2020-2023  润新知