java基础关于线程

黑马视频笔记:

线程安全问题的解决:

1,synchronized分为同步代码块和同步函数,使用的时候需要注意的是两者的锁需一致,是this。

如果在同步函数和共享变量上添加static(即静态的同步方法),那么锁又会变成什么?

static方法中不可以定义this,静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象。

所以此时锁是类名.class

2.在单例设计模式中,懒汉式也会出现线程安全问题,修改代码如下:

//懒汉式  延迟加载(只有调用方法的时候才会创建对象,对内存使用的便利)
3 class Single{
2 private static Single s = null;
1 private Single(){}
13 public static synchronized Single getInstance(){         //synchronized加在此处的弊端有:线程很多,每个线程到这的时候获取实例都要判断锁,比较低效
1 if (s == null){
2 s = new Single();
3 }
4 return s;
5 }
6 }
7
8 class SingleDemo{
9 public static void main(String[] args){
10 System.out.println("HelloWorld");
11
12 }
13 } 

//修改后的懒汉式

//懒汉式
  8 class Single{
  7     private static Single s = null;
  6     private Single(){}
  5     public static Single getInstance(){
  4        if(s == null ){
  3         synchronized(Single.class){
  2          if (s == null){
  1             s = new Single();
18            }                                                                 
  1          }
  2        }
  3         return s;
  4     }    
  5 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值