package com.lesson19;
public class ThreadTicket {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// MyThread myThread =new MyThread();
// myThread.start();
MyRunnable myRunnable = new MyRunnable();
Thread t1 = new Thread(myRunnable);
Thread t2 = new Thread(myRunnable);
myRunnable.idmorter=1;
myRunnable.stop=true;
Thread t3 = new Thread(myRunnable);
Thread t4 = new Thread(myRunnable);
t1.start();
t2.start();
t3.start();
t4.start();
myRunnable.stop=false;
}
}
package com.lesson19;
public class MyThread extends Thread {
int ticket = 100;
public void run() {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
while (true) {
if(ticket>0){
System.out.println("ticket is" + ticket--);
}
}
}
}
package com.lesson19;
public class MyRunnable implements Runnable {
int ticket = 100;
String sync = "";
int idmorter =0;
boolean stop=true;
public void run() {
while (stop) {
if (idmorter == 0) {
sale();
}else{
// 线程同步---原子性的
synchronized (sync) {
if (ticket > 0) {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(Thread.currentThread().getName()
+ "ticket is" + ticket--);
}
}
}
}
}
//synchronized---监控所在的对象
synchronized void sale(){
if (ticket > 0) {
System.out.println(Thread.currentThread().getName()
+ "ticket is" + ticket--);
}
}
}