package sell_ticket;
public class ThreadTicket {
public static void
main(String[] args) {
MyThread m = new MyThread();
Thread t1 = new Thread(m);
Thread t2 = new Thread(m);
Thread t3 = new Thread(m);
t1.start();
t2.start();
t3.start();
}
}
class MyThread implements Runnable{
private int
ticket=100;
public void
run(){
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//用synchronized包起来,形成同步代码块,但后来发现用不用其实一样
synchronized(this){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"出售了"+ticket);
ticket--;
}
}
第二种,采用堆栈的方式:
class Producer implements Runnable
{
private
String producerName = null;
StoreHouse storeHouse = null;
public
Producer(String producerName, StoreHouse storeHouse) {
this.producerName = producerName;
this.storeHouse = storeHouse;
setProducerName(String producerName) {
String getProducerName() {
return producerName;
produceProduct() {
int i = 0;
while (true) {
i++;
Product pro = new Product(i);
storeHouse.push(pro);
System.out.println(getProducerName() + " 生产了 " + pro);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
return;
run() {
produceProduct();
class Consumer implements Runnable {
String consumerName = null;
Consumer(String consumerName, StoreHouse storeHouse) {
this.consumerName = consumerName;
setConsumerName(String consumerName) {
String getConsumerName() {
return consumerName;
consumerProduct() {
System.out.println(getConsumerName() + " 消费了 " +
storeHouse.pop());
Thread.sleep(5000);
consumerProduct();
class Product {
productId = 0;
Product(int productId) {
this.productId = productId;
public int
getProductId() {
return productId;
String toString() {
return Integer.toString(productId);
class StoreHouse {
base = 0;
top = 0;
Product[] products = new Product[10];
synchronized void push(Product product) {
while (top == products.length) {
notify();
System.out.println("仓库已满,正等待消费...");
wait();
System.out.println("stop push product because other
reasons");
products[top] = product;
top++;
synchronized Product pop() {
Product pro = null;
while (top == base) {
System.out.println("仓库已空,正等待生产...");