同步 4
package thread; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class TestOne { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public static void main(String[] args) { /** * 14.5.12 为每个线程构造一个实例 * 为了避免共享变量, * ThreadLocal 辅助类为各个线程提供各自的实例。 * * * 有几个方法 * get * set * current * remove * * * 14.5.13 锁测试和超时 * * tryLock( ) * 尝试获得锁,如果成功返回true,如果失败立刻获取其他的锁。 * * await(long time,TimeUtil unit) * 进入条件的等待集,直到线程从等待集中移除或者等待了指定的时间。如果因为等待时间到了返回就返回false。否则返回true * * * 14.5.14 读写锁 * readLock()得到一个可以被一个或多个线程公用的读锁,会排斥所有写锁 * writeLock() 得到一个写锁 ,会排斥所有读写操作 */ ReentrantReadWriteLock rw = new ReentrantReadWriteLock(); Lock readLock = rw.readLock(); Lock writeLock = rw.writeLock(); readLock.lock(); writeLock.lock(); ThreadLocal threadLocal = new ThreadLocal(); // threadLocal.get(); System.out.println(threadLocal.get()); new TestOne().method1(); } //会有问题?没看出来 public void method1(){ for(int i=0;i<500;i++){ new Thread(){ public void run() { String dateStr = sdf.format(new Date()); System.out.println(dateStr); } }.start(); /*try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); }*/ } } }