標籤:java concurrency
Summary:Synchronized and Unsynchronized Collections, Properties
-In many applications, there is no need for synchronization, so the Collections API doesnot provide it by default. Instead, you can create a synchronized version of any collection
using the following methods of the Collections class:
public static Collection synchronizedCollection(Collection c)public static Set synchronizedSet(Set s)public static List synchronizedList(List list)public static Map synchronizedMap(Map m)public static SortedSet synchronizedSortedSet(SortedSet s)public static SortedMap synchronizedSortedMap(SortedMap m)
-For example, the following shows how to create a threadsafe List
List list = new ArrayList();List syncList = Collections.synchronizedList(list);
-This is important, so remember this! Although synchronized collections are threadsafe, the Iterator s returned from them are not.
synchronized(syncList) {Iterator iterator = syncList.iterator();// do stuff with the iterator here}
-The java.util.concurrent.ConcurrentHashMap class is part of the concurrency utilities package and provides a Map that performs well under multithreaded access.
-You can use the Collections class to create read-only versions of any collection
public static Collection unmodifiableCollection(Collection c)public static Set unmodifiableSet(Set s)public static List unmodifiableList(List list)public static Map unmodifiableMap(Map m)public static SortedSet unmodifiableSortedSet(SortedSet s)public static SortedMap unmodifiableSortedMap(SortedMap m)
-The java.util.Properties class is a specialized hash table for strings. Properties are generally used to hold textual configuration data.
-Any string values can be stored as key/value pairs in a Properties table. However, the convention is to use a dot-separated naming hierarchy to group property names into
logical structures.
Properties props = new Properties();props.setProperty("myApp.xsize", "52");props.setProperty("myApp.ysize", "79");
String xsize = props.getProperty( "myApp.xsize" );
You can save a Properties table to an OutputStream using the save() method. The property information is output in a flat ASCII format.
props.save( System.out, "Application Parameters" );
-The load() method reads the previously saved contents of a Properties object from an InputStream
FileInputStream fin;...Properties props = new Properties()props.load( fin );
-The Properties class also contains storeToXML() and loadFromXML() methods. These operate just like the save() and load() methods but write an XML file like the following
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties><comment>My Properties</comment><entry key="myApp.ysize">79</entry><entry key="myApp.xsize">52</entry></properties>
-The java.lang.System class provides access to basic system environment information through the static System.getProperties() method. This method returns a Properties table that contains system properties.
Next:The Preference API
Java Notes-11