需求:簡單的買票程序,多個窗口賣票,多線程
定義一個類Ticket實現Runnable接口,
定義成員屬性int類型的票數nums
實現run()方法,run方法中
while(true)的死循環,打印nums--
獲取Ticket對象,new出來
獲取Thread()對象,new出來,構造參數:Runable對象
調用Thread對象的start()方法,開啟線程
此時會有線程安全問題,使用synchronized同步代碼塊解決安全問題
避免死鎖問題,同步中嵌套同步,而鎖不同
class Ticket implements Runnable {
private int nums = 100;
@Override
public void run() {
while (true) {
synchronized (this) {
if (nums > 0) {
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "==="
+ (nums--));
}else{
break;
}
}
}
}
}
public class TicketDemo {
/**
* @param args
*/
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket).start();
new Thread(ticket).start();
new Thread(ticket).start();
new Thread(ticket).start();
}
}
