-
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块之外的代码可以被多个线程同时访问到。
-
相关阅读:
售后返修管理软件流程设计图
Easyui datagrid加载数据时默认全选的问题
如何做好售后管理之售后返修品管理
您需要售后返修管理软件的N个理由
使用软件量化考核售后维修人员业绩?
如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密!
VS.Net开发必备,让您的代码自动收缩,如何实现!
vs生成dll,却没有生成相应的lib
c++、webServices、gsoap、tinyxml、iconv
gsoap、c++。webservice的client。
-
原文地址:https://www.cnblogs.com/nextStep/p/6691299.html
Copyright © 2020-2023
润新知