Project

General

Profile

LambdaVsAnonymousInner.java

Greg Shah, 04/15/2016 10:06 AM

Download (2.33 KB)

 
1

    
2
public class LambdaVsAnonymousInner
3
{
4
   private static final long ITERATIONS = 10000000000L;
5
   
6
   int value1 = 0;
7
   int value2 = 0;
8
   
9
   public void loopInner(long num)
10
   {
11
      for (long i = 0; i < num; i++)
12
      {
13
         Worker<Object> worker = new Worker<Object>()
14
         {
15
            public void process(Object obj)
16
            {
17
               value1++;
18
            }
19
         };
20
         
21
         worker.process(null);
22
      }
23
   }
24

    
25
   public void loopInnerNoCapture(long num)
26
   {
27
      for (long i = 0; i < num; i++)
28
      {
29
         Worker<LambdaVsAnonymousInner> worker = new Worker<LambdaVsAnonymousInner>()
30
         {
31
            public void process(LambdaVsAnonymousInner me)
32
            {
33
               me.value1++;
34
            }
35
         };
36
         
37
         worker.process(this);
38
      }
39
   }
40

    
41
   public void loopLambda(long num)
42
   {
43
      for (long i = 0; i < num; i++)
44
      {
45
         Worker<Object> worker = (Object obj) -> { value2++; };
46
         worker.process(null);
47
      }
48
   }
49

    
50
   public void loopLambdaNoCapture(long num)
51
   {
52
      for (long i = 0; i < num; i++)
53
      {
54
         Worker<LambdaVsAnonymousInner> worker = (LambdaVsAnonymousInner me) -> { me.value2++; };
55
         worker.process(this);
56
      }
57
   }
58

    
59
   public static void main(String[] args)
60
   {
61
      LambdaVsAnonymousInner test = new LambdaVsAnonymousInner();
62
      
63
      long start = System.currentTimeMillis();
64
      
65
      test.loopLambdaNoCapture(ITERATIONS);
66
      
67
      long end = System.currentTimeMillis();
68
      
69
      System.out.printf("lambda no capture loop millis = %d\n", end - start);
70
      
71
      start = System.currentTimeMillis();
72
      
73
      test.loopLambda(ITERATIONS);
74
      
75
      end = System.currentTimeMillis();
76
      
77
      System.out.printf("lambda with capture loop millis = %d\n", end - start);
78
      
79
      start = System.currentTimeMillis();
80
      
81
      test.loopInner(ITERATIONS);
82
      
83
      end = System.currentTimeMillis();
84
      
85
      System.out.printf("inner class loop millis = %d\n", end - start);
86
      
87
      start = System.currentTimeMillis();
88
      
89
      test.loopInnerNoCapture(ITERATIONS);
90
      
91
      end = System.currentTimeMillis();
92
      
93
      System.out.printf("inner class loop no capture loop millis = %d\n", end - start);
94
   }
95
   
96
   private interface Worker<T>
97
   {
98
      public void process(T obj);
99
   }
100
}