-
Java基础回顾 —线程同步详解
- 停止线程的方式:
不能使用Thread类的stop方法来终止线程的执行,一般要设定一个变量,在run方法中是一个循环,循环每次检查该变量,如果满足条件则继续执行,否则跳出循环,线程结束。
- 不能依靠线程的优先级来决定线程的执行顺序。
通过实现Runnable接口的多线程类,该类的属性会被多个线程共享,就会导致资源同步的问题。如果多个任务以一种会引起冲突的方式访问一个公共的资源,称为竞争状态。如果一个类的对象在多线程程序中没有导致竞争状态,则称这样的类为线程安全的。
- synchronized关键字:
当修饰一个方法时,该方法叫做同步方法。
- java中的每个对象都有一个锁lock,或者叫做监视器monitor,当访问某个对象的synchronized方法时, 表示将该对象上锁, 此时其他线程都无法访问该对象的synchronized方法,知道之前那个线程执行方法完毕后或者抛出了异常,那么该对象的锁会释放,其他线程才有可能再去访问该synchronized方法。
- 如果一个对象有多个synchronized方法,在某个时刻线程已经进入了某个synchronized方法,那么在该方法没执行完之前,其他线程无法访问该对象的任何synchronized方法。
- 如果某个synchronized方法是static的,那么当线程访问该方法时,它锁的不是synchronized所在的对象,而是synchronized方法所在对象对应的Class对象,因为java中无论一个类有多少个对象,这些对象会对应唯一一个Class对象,因此当线程访问同一个类的两个对象的两个static、synchronized方法,他们也是顺序执行,也就是一个线程先执行方法,完成后另一个线程才开始执行。
- synchronized块,写法:
synchronized(Object){}: 表示线程在执行的时候会对Object对象上锁。
synchronized(this){}: 表示线程在执行的时候会对当前对象上锁。
- synchronized方法时粗粒度的并发控制,某一时刻只能有一个线程执行该synchronized方法。
synchronized块则是一种细粒度的并发控制,只会讲块中的代码同步,位于方法内、synchronized块之外的代码可以被多个线程同时访问到。
-
相关阅读:
Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)
StringBuffer和StringBuilder使用方法比較
python 多线程编程
八大排序算法总结
腾讯面试
顶尖的个人作品集站点设计赞赏
MATLAB新手教程
ThreadPoolExecutor使用介绍
linux diff具体解释
Android借助Application重写App的Crash(简易版)
-
原文地址:https://www.cnblogs.com/nextStep/p/6691299.html
Copyright © 2020-2023
润新知