Bael 806 lazy (#2248)
* BAEL-806 lazy article code * BAEL-806 remove comment
This commit is contained in:
		
							parent
							
								
									54c6928bfe
								
							
						
					
					
						commit
						1b9353c83e
					
				| @ -0,0 +1,14 @@ | |||||||
|  | package com.baeldung.lazy; | ||||||
|  | 
 | ||||||
|  | public class ClassWithHeavyInitialization { | ||||||
|  |     private ClassWithHeavyInitialization() { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private static class LazyHolder { | ||||||
|  |         public static final ClassWithHeavyInitialization INSTANCE = new ClassWithHeavyInitialization(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static ClassWithHeavyInitialization getInstance() { | ||||||
|  |         return LazyHolder.INSTANCE; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,20 @@ | |||||||
|  | package com.baeldung.kotlin; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import com.baeldung.lazy.ClassWithHeavyInitialization; | ||||||
|  | import org.junit.Test; | ||||||
|  | 
 | ||||||
|  | import static junit.framework.TestCase.assertTrue; | ||||||
|  | 
 | ||||||
|  | public class LazyJavaUnitTest { | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void giveHeavyClass_whenInitLazy_thenShouldReturnInstanceOnFirstCall() { | ||||||
|  |         //when | ||||||
|  |         ClassWithHeavyInitialization classWithHeavyInitialization = ClassWithHeavyInitialization.getInstance(); | ||||||
|  |         ClassWithHeavyInitialization classWithHeavyInitialization2 = ClassWithHeavyInitialization.getInstance(); | ||||||
|  | 
 | ||||||
|  |         //then | ||||||
|  |         assertTrue(classWithHeavyInitialization == classWithHeavyInitialization2); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | package com.baeldung.kotlin | ||||||
|  | 
 | ||||||
|  | import org.junit.Test | ||||||
|  | import java.util.concurrent.CountDownLatch | ||||||
|  | import java.util.concurrent.Executors | ||||||
|  | import java.util.concurrent.TimeUnit | ||||||
|  | import java.util.concurrent.atomic.AtomicInteger | ||||||
|  | import kotlin.test.assertEquals | ||||||
|  | 
 | ||||||
|  | class LazyUnitTest { | ||||||
|  |     @Test | ||||||
|  |     fun givenLazyValue_whenGetIt_thenShouldInitializeItOnlyOnce() { | ||||||
|  |         //given | ||||||
|  |         val numberOfInitializations: AtomicInteger = AtomicInteger() | ||||||
|  |         val lazyValue: ClassWithHeavyInitialization by lazy { | ||||||
|  |             numberOfInitializations.incrementAndGet() | ||||||
|  |             ClassWithHeavyInitialization() | ||||||
|  |         } | ||||||
|  |         //when | ||||||
|  |         println(lazyValue) | ||||||
|  |         println(lazyValue) | ||||||
|  | 
 | ||||||
|  |         //then | ||||||
|  |         assertEquals(numberOfInitializations.get(), 1) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     fun givenLazyValue_whenGetItUsingPublication_thenCouldInitializeItMoreThanOnce() { | ||||||
|  |         //given | ||||||
|  |         val numberOfInitializations: AtomicInteger = AtomicInteger() | ||||||
|  |         val lazyValue: ClassWithHeavyInitialization by lazy(LazyThreadSafetyMode.PUBLICATION) { | ||||||
|  |             numberOfInitializations.incrementAndGet() | ||||||
|  |             ClassWithHeavyInitialization() | ||||||
|  |         } | ||||||
|  |         val executorService = Executors.newFixedThreadPool(2) | ||||||
|  |         val countDownLatch = CountDownLatch(1) | ||||||
|  |         //when | ||||||
|  |         executorService.submit { countDownLatch.await(); println(lazyValue) } | ||||||
|  |         executorService.submit { countDownLatch.await(); println(lazyValue) } | ||||||
|  |         countDownLatch.countDown() | ||||||
|  | 
 | ||||||
|  |         //then | ||||||
|  |         executorService.awaitTermination(1, TimeUnit.SECONDS) | ||||||
|  |         executorService.shutdown() | ||||||
|  |         assertEquals(numberOfInitializations.get(), 2) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     class ClassWithHeavyInitialization { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     lateinit var a: String | ||||||
|  |     @Test | ||||||
|  |     fun givenLateInitProperty_whenAccessItAfterInit_thenPass() { | ||||||
|  |         //when | ||||||
|  |         a = "it" | ||||||
|  |         println(a) | ||||||
|  | 
 | ||||||
|  |         //then not throw | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test(expected = UninitializedPropertyAccessException::class) | ||||||
|  |     fun givenLateInitProperty_whenAccessItWithoutInit_thenThrow() { | ||||||
|  |         //when | ||||||
|  |         println(a) | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user