多線程(線程安全問題)學習筆記
阿新 • • 發佈:2018-08-08
售票 try object stat exce get sync 使用 except
多線程並發操作同一數據時, 就有可能出現線程安全問題
* 使用同步技術可以解決這種問題, 把操作數據的代碼進行同步, 不要多個線程一起操作
public class Demo2_Synchronized {
/**
* @param args
* 需求:鐵路售票,一共100張,通過四個窗口賣完.
*/
public static void main(String[] args) {
TicketsSeller t1 = new TicketsSeller();
TicketsSeller t2 = new TicketsSeller();
TicketsSeller t3 = new TicketsSeller();
TicketsSeller t4 = new TicketsSeller();
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t4.setName("窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class TicketsSeller extends Thread {
private static int tickets = 100;
static Object obj = new Object();
public TicketsSeller() {
super();
}
public TicketsSeller(String name) {
super(name);
}
public void run() {
while(true) {
synchronized(obj) {
if(tickets <= 0)
break;
try {
Thread.sleep(10);//線程1睡,線程2睡,線程3睡,線程4睡
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + "...這是第" + tickets-- + "號票");
}
}
}
}
多線程(線程安全問題)學習筆記