Java多线程发展简史(4)
JDK 6.0
JDK 6.0对锁做了一些优化,比如锁自旋、锁消除、锁合并、轻量级锁、所偏向等。在这里不一一介绍,但是给一个例子以有感性认识:
import java.util.Vector; public class LockElimination { public String getStr() { Vector v = new Vector(); v.add(3); v.add(4); return v.toString(); } public static void main(String[] args) { System.out.println(new LockElimination().getStr()); } } 
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class BarrierUsage extends Thread { private static CyclicBarrier barrier = new CyclicBarrier(2, new Thread() { public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { } System.out.println("finish"); }; }); private final int sleepMilSecs; public BarrierUsage(int sleepMilSecs) { this.sleepMilSecs = sleepMilSecs; } @Override public void run() { try { Thread.sleep(sleepMilSecs); System.out.println(sleepMilSecs + " secs slept"); barrier.await(); } catch (InterruptedException e) { } catch (BrokenBarrierException e) { } } public static void main(String[] args) { new BarrierUsage(2000).start(); new BarrierUsage(4000).start(); } } 
using System; using System.Threading; public class AnyClass { public void DoSth() { Console.WriteLine("working"); } } class ThreadTest{ public static void Main() { AnyClass anyClass = new AnyClass(); ThreadStart threadDelegate = new ThreadStart(anyClass.DoSth); Thread myThread = new Thread(threadDelegate); myThread.Start(); } } thread := Object clone thread start := method("working" println) thread @@start import java.util.concurrent.locks.ReentrantLock; public class ReentrantLockUsage implements Runnable { private static ReentrantLock lock = new ReentrantLock(); @Override public void run() { lock.lock(); try { System.out.println("do something 1"); Thread.sleep(2000); } catch (InterruptedException e) { } finally { lock.unlock(); // Why put it in finally block? } System.out.println("finish 1"); } public static void main(String[] args) { new Thread(new ReentrantLockUsage()).start(); lock.lock(); try { System.out.println("do something 2"); Thread.sleep(2000); } catch (InterruptedException e) { } finally { lock.unlock(); } System.out.println("finish 2"); } } 