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