服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java多线程窗口售票问题实例

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

2021-02-21 10:53杯酒故人 Java教程

这篇文章主要介绍了Java多线程窗口售票问题实例,具有一定参考价值,需要的朋友可以了解下。

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

具体代码如下:

第一种:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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();
    }
  }
}

结果:

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

第二种:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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--) + "张票");
        }
      }
    }
  }
}

结果:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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多线程窗口售票问题实例的全部内容,希望对打击有所帮助。如有问题可以随时留言,期待您的宝贵意见。

原文链接:https://www.cnblogs.com/neuhao/p/6485573.html

延伸 · 阅读

精彩推荐