1. 程式人生 > >多執行緒_執行緒安全問題的產生原因分析

多執行緒_執行緒安全問題的產生原因分析

package cn.itcast_09;

/*
 * 如何解決執行緒安全問題呢?
 * 
 * 要想解決問題,就要知道哪些原因會導致出問題:(而且這些原因也是以後我們判斷一個程式是否有執行緒安全問題的標準)
 * 		A:是否是多執行緒環境
 * 		B:是否有共享資料
 * 		C:是否有多條語句操作共享資料
 * 那這個售票程式有沒有上面的問題呢?
 * 		A:是否是多執行緒環境	是(t1,t2,t3)
 * 		B:是否有共享資料		是(int Tickets=100)
 * 		C:是否有多條語句操作共享資料		是(if(Tickets>0){Tickets--})
 */
public class SellTicketDemo {
	public static void main(String[] args) {
		// 建立資源物件
		SellTicket st = new SellTicket();

		// 建立執行緒物件
		Thread t1 = new Thread(st, "視窗1");
		Thread t2 = new Thread(st, "視窗2");
		Thread t3 = new Thread(st, "視窗3");

		// 啟動執行緒
		t1.start();
		t2.start();
		t3.start();
	}
}
package cn.itcast_09;

public class SellTicket implements Runnable {
	// 定義100張票
	private int tickets = 100;

	@Override
	public void run() {
		while (true) {
			if (tickets > 0) {
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName() + "正在出售第"
						+ (tickets--) + "張票");

			}
		}

	}
}