起因
多线程带来并行,提高了效率,但因为并行执行次序交错,也就有了线程同步,最简单粗暴的方式,就是使用同步锁.
卖票的故事(多线程出票)
public class Ticket implements Runnable {
private int tickets = 100;
private Object obj = new Object();
@Override
public void run() {
do {
synchronized (obj) {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "出售票" + (tickets--));
}
}
} while (tickets > 0);
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t1 = new Thread(ticket,"窗口1");
Thread t2 = new Thread(ticket,"窗口2");
Thread t3 = new Thread(ticket,"窗口3");
Thread t4 = new Thread(ticket,"窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
在Java使用同步锁,使用很方便,比起在Windows API临界区,可以看看http://www.qiufengblog.com/articles/criticalsection.html