新版Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课2022

download:新版Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课2022

单例形式的简介
我们将一个类在当行进程中只要一个实例的这种形式,称之为“单例形式”
那么Java代码如何完成一个单例形式呢?下文将逐个到来,如下所示:

单例形式的留意事项:
1.单例形式在一个进程中只要一个实例
2.单例类通常由本人创立本身的实例
3.单例类给其他对象提供的都是同一个实例
1.
2.
3.
4.
测试代码

package com.java265.Singleton;
public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("------单例形式-----");

    //创立100个线程停止测试
    for(int i=0;i<100;i++) {
        new Thread(()->{
            System.out.println(Single01.getInstance());
         }).start();
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

单例完成形式1
饿汉式单例形式:
直接运用一个静态变量,在JVM加载类时,生成一个单例实例 如下

package com.java265.Singleton;

public class Single01 {

private static final Single01 INSTANCE = new Single01();

private Single01() {}
public static  Single01 getInstance () {
    return INSTANCE;
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

运用static静态代码块生成一个单例类

package com.java265.Singleton;
public class Single02 {

private static final Single02  INSTANCE;
static {
     INSTANCE = new Single02();
}
private Single02() {}

public static Single02 getInstance() {
    return INSTANCE;    
}
public void t() {
     System.out.println("Single02 t办法"
             + "");
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.

运用判别的方式,创立单例形式,
但是此处不是一个线程平安的创立方式

package com.java265.Singleton;

/*

  • 这是一个线程不平安的创立单例形式的方式
  • 这是一个懒汉式的创立单例形式的方式
  • */

public class Single03 {

private static Single03 INSTANCE;
private Single03() {    
}

public  static Single03 getInstance() {
     if(INSTANCE ==null)
     {
            // 多个线程都会被卡在此处,
            // 当sleep运转终了后,多个线程会同时创立实例,此处的代码是产生线程不平安的本源
         try
         {
          Thread.sleep(100);
         }catch(InterruptedException e)
         {
         }
         INSTANCE = new Single03();
     }
     return INSTANCE;
}    

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.

运用 synchronized为办法加上锁,使其线程平安

package com.java265.Singleton;
public class Single04 {

private static volatile Single04 INSTANCE;
private Single04() {    
}

/*
 * 懒汉式生成单例实例 此处运用 synchronized 平安锁
 */
public  static  synchronized Single04 getInstance() {
     if(INSTANCE ==null)
     {
         try
         {
          Thread.sleep(100);
         }catch(InterruptedException e)
         {
         }
         INSTANCE = new Single04();
     }
     return INSTANCE;
}    

}

你可能感兴趣的:(scrapy)