Java线程同步卖票问题解决方案(synchronized)

关键知识点:synchronized、Runnable

synchronized:

1、使用同步代码块进行卖票:

public class TicketsCodeBlock implements Runnable { 
    private int count = 100; //总票数目 

    public static void main(String[] args) { 
        TicketsCodeBlock tickets = new TicketsCodeBlock(); 
        Thread t1 = new Thread(tickets); 
        Thread t2 = new Thread(tickets); 
        Thread t3 = new Thread(tickets); 
        t1.start(); 
        t2.start(); 
        t3.start(); 
     } 
    public void run() { 
        for (int i = 0; i < 10; i++) {
            synchronized (this) { // 同步代码块 
                if (count > 0) {
                      try { 
                        Thread.sleep(500); // 500ms 
                      } catch (Exception e){ 
                         e.printStackTrace(); 
                      } 
                      Thread t = Thread.currentThread();
                      System.out.println(t.getName() + " 剩余票的数目: " + (count--)); 
                  }
             }
         } 
    }
}

2、使用同步方法进行卖票:
public class TicketsMethod implements Runnable {
private int count = 100; //总票数目

public static void main(String[] args) { 
    TicketsMethod tickets = new TicketsMethod(); 
    Thread t1 = new Thread(tickets); 
    Thread t2 = new Thread(tickets); 
    Thread t3 = new Thread(tickets); 
    t1.start(); 
    t2.start(); 
    t3.start(); 
 } 
public void run() { 
    for (int i = 0; i < 10; i++) {
        sale();
    }

}
// 使用同步方法进行卖票
public synchronized void sale() {
if (count > 0) {
try {
Thread.sleep(500); // 500ms
} catch (Exception e){
e.printStackTrace();
}
Thread t = Thread.currentThread();
System.out.println(t.getName() + " 剩余票的数目: " + (count--));
}
}
}
}
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,482评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,986评论 1 18
  • synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码...
    明教de教主阅读 682评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 刚来平顺,一路上低矮的山坡,青翠的树木以及一望无际的平原和遥遥走不到尽头的公路给这个陌生的县城增添了一丝神秘的气氛...
    ZhaOvZhaO阅读 291评论 0 0