Delete App.java
This commit is contained in:
		| @@ -1,108 +0,0 @@ | ||||
| /** | ||||
|  * The MIT License | ||||
|  * Copyright (c) 2016 Thomas Bauer | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| package com.iluwatar.tls; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Calendar; | ||||
| import java.util.Collections; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * ThreadLocal pattern | ||||
|  * <p> | ||||
|  * This App shows how to create an isolated space per each thread. In this | ||||
|  * example the usage of SimpleDateFormat is made to be thread-safe. This is an | ||||
|  * example of the ThreadLocal pattern. | ||||
|  * <p> | ||||
|  * By applying the ThreadLocal pattern you can keep track of application | ||||
|  * instances or locale settings throughout the handling of a request. The | ||||
|  * ThreadLocal class works like a static variable, with the exception that it is | ||||
|  * only bound to the current thread! This allows us to use static variables in a | ||||
|  * thread-safe way. | ||||
|  * <p> | ||||
|  * In Java, thread-local variables are implemented by the ThreadLocal class | ||||
|  * object. ThreadLocal holds variable of type T, which is accessible via get/set | ||||
|  * methods. | ||||
|  * <p> | ||||
|  * SimpleDateFormat is one of the basic Java classes and is not thread-safe. If | ||||
|  * you do not isolate the instance of SimpleDateFormat per each thread then | ||||
|  * problems arise. These problems are described with the example {@link AppUgly} | ||||
|  *  | ||||
|  */ | ||||
| public class App { | ||||
|   // A list to collect the date values created in the the threads | ||||
|   static List<Date> dateList = Collections.synchronizedList(new ArrayList<Date>()); | ||||
|  | ||||
|   // A list to collect Exceptions thrown in the threads (should be none in | ||||
|   // this example) | ||||
|   static List<String> exceptionList = Collections.synchronizedList(new ArrayList<String>()); | ||||
|  | ||||
|   /** | ||||
|    * Program entry point | ||||
|    *  | ||||
|    * @param args | ||||
|    *          command line args | ||||
|    */ | ||||
|   public static void main(String[] args) { | ||||
|     int counterDateValues = 0; | ||||
|     int counterExceptions = 0; | ||||
|  | ||||
|     // Create a runnable | ||||
|     DateFormatRunnable runnableDf = new DateFormatRunnable("dd/MM/yyyy", "15/12/2015"); | ||||
|     // start 4 threads, each using the same Runnable instance | ||||
|     Thread t1 = new Thread(runnableDf); | ||||
|     Thread t2 = new Thread(runnableDf); | ||||
|     Thread t3 = new Thread(runnableDf); | ||||
|     Thread t4 = new Thread(runnableDf); | ||||
|     t1.start(); | ||||
|     t2.start(); | ||||
|     t3.start(); | ||||
|     t4.start(); | ||||
|     try { | ||||
|       t1.join(); | ||||
|       t2.join(); | ||||
|       t3.join(); | ||||
|       t4.join(); | ||||
|     } catch (InterruptedException e) { | ||||
|       // Action not coded here | ||||
|     } | ||||
|     for (Date dt : dateList) { | ||||
|       // a correct run should deliver 20 times 15.12.2015 | ||||
|       counterDateValues++; | ||||
|       Calendar cal = Calendar.getInstance(); | ||||
|       cal.setTime(dt); | ||||
|       // Formatted output of the date value: DD.MM.YYYY | ||||
|       System.out.println( | ||||
|           cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + +cal.get(Calendar.YEAR)); | ||||
|     } | ||||
|     for (String ex : exceptionList) { | ||||
|       // a correct run shouldn't deliver any exception | ||||
|       counterExceptions++; | ||||
|       System.out.println(ex); | ||||
|     } | ||||
|     System.out.println("The List dateList contains " + counterDateValues + " date values"); | ||||
|     System.out.println("The List exceptionList contains " + counterExceptions + " exceptions"); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user