关于避免多线程并发的处理问题

使用synchronized可以控制多线程并发导致的同时调用同一数据的问题,例如三个售票窗口同时售票的问题,为了防止其他窗口出售已经出售了的车票,可以采用synchronized来处理,具体代码如下
/*
 * 功能:模拟车站三窗口售票线程,防止多窗口同时出售同一张票
 */
package Demo14;

public class Demo14_5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TickWindow tickWindow1 = new TickWindow();
		
		Thread t1 = new Thread(tickWindow1);
		Thread t2 = new Thread(tickWindow1);
		Thread t3 = new Thread(tickWindow1);
		
		t1.start();
		t2.start();
		t3.start();
	}

}

class TickWindow implements Runnable {

	private int nums = 2000;//定义车票总数
	public void run() {
		//synchronized控制线程逐一进行,避免多个线程并发
		while (true) {
			synchronized (this) {	
				if (nums > 0) {
					System.out.println
					(Thread.currentThread().getName()+"正在售第"+nums+"张票");
					//Thread.currentThread().getName();表示读取线程的名称
					try {
						Thread.sleep(1000);//表示线程休眠时间为1秒
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					nums--;
				} else {
					break;
				}
			}
		}
	}	
}

你可能感兴趣的:(线程,Java)