zoukankan      html  css  js  c++  java
  • 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块之外的代码可以被多个线程同时访问到。
  • 相关阅读:
    讨论Android开发中的MVC设计思想
    关于AppFromwork集成XMPP开发的使用详解
    Android 强大的开发支持库组件AppFromwork框架详解
    Z语音概述from百度
    《软件形式规格说明语言-Z》 缪淮扣 学习笔记 10-12
    形式化规格技术和验证技术小结
    编译TS发生 Property or signature expected
    electron 启动错误
    java学习第三章4.运算
    java学习第三章3.基本类型的转换和直接量
  • 原文地址:https://www.cnblogs.com/nextStep/p/6691299.html
Copyright © 2011-2022 走看看