线程安全
来源:互联网 发布:ubuntu 运行c 编辑:程序博客网 时间:2024/06/09 23:27
JAVA线程的特性是切换执行,很有可能该语句执行一半就切换时间片了,所以容易出现很多安全问题
为了避免这一问题,我们在多线程访问公共资源的时候应该考虑使用同步块或同步方法;
同步块
synchronized(object){
}
这个同板块内的内容一段时间内只能执行一次,第一个执行到的会锁上,接下来执行到的必须等解锁后才能执行。
例如int a=10;
new Thread(){
Object obj;
synchronized(obj){//这里obj也可以替换成当前类或者参数
a++;
sleep(100000);//省略异常处理
}
}.start();
线程开启多个后,a并不会疯狂++;而是每隔大约100000ms加一次,因为第一个线程把同步块锁住之后休眠了,而其他线程必须等待解锁才能执行
同步方法
同步方法和同步块类似,把整个方法视作在一个同步块内
单例模式
同步方法和同步块常常用于单例模式,单例模式就是指整个程序唯一的一个
分为懒汉模式和饿汉模式
懒汉模式是再需要时才实例化,恶汉模式是声明的时候就实例化了
A a;//A为类名
publicsynchronized A lanhan()
{
if(a==null)
a=new A();//假设A的构造方法不带参数
return a;
}
B b=new B();
public synchronize B ehan()
{
return b;
}
0 0
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- leetcode 44. Wildcard Matching
- xampp下mysql解决中文乱码问题
- cas4.2.7定制登录页面样式(并且让页面默认使用中文提示)
- 哈夫曼编码
- 简单排序算法时间空间复杂度分析及应用(1)-冒泡排序
- 线程安全
- c++指针的一些陷阱(更新ing)
- thinkphp部署到Linux后验证码功能不显示
- 类和对象的深入剖析【整理】
- 神经网络向量化实现
- Protobuffer 中文序列化反序列化乱码?丢失?
- 200. Number of Islands(unsolved)
- Linux运维笔记-文档总结-Linux中的进程管理
- 火狐页面放缩比例一次设置永久有效