首页 > 编程 > Java > 正文

Java多线程窗口售票问题实例

2019-11-26 10:50:52
字体:
来源:转载
供稿:网友

本文介绍了多线程实现多个窗口售票问题的两种枷锁方式, 分别是synchronized 和lock()和unlock()

具体代码如下:

第一种:

package Runnable;  import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;  /*  * 同步  * 这里有两种方式加锁  * 分别是  * 1.synchronized  * 2.lock()和unlock()  */ public class MyRunnable implements Runnable {   private int tickets = 100;    // 定义锁   private Lock lock = new ReentrantLock();    public void run() {     while (true) {       // 加锁       lock.lock();       if (tickets > 0) {         try {           Thread.sleep(100);         } catch (InterruptedException e) {           // TODO Auto-generated catch block           e.printStackTrace();         }         System.out.println(Thread.currentThread().getName() + "售出了第" + (tickets--) + "张票");       }       lock.unlock();     }   } }

结果:

第二种:

package Runnable;   /*  * 同步  * 这里有两种方式加锁  * 分别是  * 1.synchronized  * 2.lock()和unlock()  */ public class MyRunnable implements Runnable {   private int tickets = 100;    public void run() {     while (true) {       synchronized (this) {         if (tickets > 0) {           try {             Thread.sleep(100);           } catch (InterruptedException e) {             // TODO Auto-generated catch block             e.printStackTrace();           }           System.out.println(Thread.currentThread().getName() + "售出了第" + (tickets--) + "张票");         }       }     }   } }

结果:

package Runnable;  public class RunnableDemo {   public static void main(String[] args) {     MyRunnable myRunnable = new MyRunnable();     Thread t1 = new Thread(myRunnable, "窗口一");     Thread t2 = new Thread(myRunnable, "窗口二");     Thread t3 = new Thread(myRunnable, "窗口三");     t1.start();     t2.start();     t3.start();   } }

不知道是巧合还是怎么回事,运行这两个多线程小实例的时候,电脑突然卡了起来,我赶紧把eclipse关了。

有关于结束进程的语句并没有添加,自行参阅吧。

以上就是本文关于Java多线程窗口售票问题实例的全部内容,希望对打击有所帮助。如有问题可以随时留言,期待您的宝贵意见。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表