Java多线程同步1
起因
多线程带来并行,提高了效率,但因为并行执行次序交错,也就有了线程同步,最简单粗暴的方式,就是使用同步锁.卖票的故事(多线程出票)
public class Ticket implements Runnable {
//总票量
private int tickets = 100;
//该变量给同步锁来使用
private Object obj = new Object();
@Override
public void run() {
do {
//同步锁(代码块),用多线程同时只能进入一个线程,在Java是synchronized关键字来修饰的,
//synchronized即可以通过给一个变量上锁来保证一个代码块是同步的,也可以放到方法来修饰即同步方法.
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
秋风
2017-07-03