线程同步
- 锁
/*synchronized.java*/ public class Synchronized implements Runnable { Timer timer = new Timer(); public static void main(String[] args) { Synchronized s = new Synchronized(); Thread t1 = new Thread(s); Thread t2 = new Thread(s); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); } public void run() { timer.add(Thread.currentThread().getName()); } } class Timer { private static int num = 0; public synchronized void add(String name) { //synchronized (this) { num++; try { Thread.sleep(1); } catch (InterruptedException e) { } System.out.println(name + ", 你是第" + num + "个使用timer的线程"); //} } }
- 死锁
/*DeadLock.java*/ public class DeadLock implements Runnable { public int flag = 1; static Object o1 = new Object(), o2 = new Object(); public void run() { if(flag==1) { synchronized (o1) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2) { System.out.println("1"); } } } if(flag==0) { synchronized (o2) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1) { System.out.println("0"); } } } } public static void main(String[] args) { DeadLock d1 = new DeadLock(); DeadLock d2 = new DeadLock(); d1.flag = 1; d2.flag = 0; Thread t1 = new Thread(d1); Thread t2 = new Thread(d2); t1.start(); t2.start(); } }