线程安全

JAVA线程的特性是切换执行,很有可能该语句执行一半就切换时间片了,所以容易出现很多安全问题

为了避免这一问题,我们在多线程访问公共资源的时候应该考虑使用同步块或同步方法;

同步块


synchronized(object){

}

这个同板块内的内容一段时间内只能执行一次,第一个执行到的会锁上,接下来执行到的必须等解锁后才能执行。

例如int  a=10;

new Thread(){

Object obj;

synchronized(obj){//这里obj也可以替换成当前类或者参数

a++;

sleep(100000);//省略异常处理

}

}.start();


线程开启多个后,a并不会疯狂++;而是每隔大约100000ms加一次,因为第一个线程把同步块锁住之后休眠了,而其他线程必须等待解锁才能执行

同步方法

同步方法和同步块类似,把整个方法视作在一个同步块内



单例模式


同步方法和同步块常常用于单例模式,单例模式就是指整个程序唯一的一个

分为懒汉模式和饿汉模式

懒汉模式是再需要时才实例化,恶汉模式是声明的时候就实例化了


A a;//A为类名


public synchronized A lanhan()

{

if(a==null)

a=new A();//假设A的构造方法不带参数

return a;

}


B b=new B();


public synchronize B ehan()

{
   return b;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值