java基础关于线程

来源:互联网 发布:淘宝usa商城 假货 编辑:程序博客网 时间:2024/05/16 13:52

黑马视频笔记:

线程安全问题的解决:

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 } 

0 0
原创粉丝点击