经典进程问题:5个窗口卖100张票,卖完为止。用Runnable和Thread2种方法实现

简介: 经典进程问题:5个窗口卖100张票,卖完为止。用Runnable和Thread2种方法实现

Thread实现方式

  1. TicketThread类代码如下:
import java.util.Random;
public class TicketThread  extends Thread{
  private static   int i=1;
  Thread th =Thread.currentThread();
  String name;
  public TicketThread(String name) {
    super();
    this.name = name;
  }
  public  void run() {
 while(i<=96) {
           try {
      th.sleep(new Random().nextInt(1000));
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }     
           synchronized(this) {
             System.out.println(this.name+",出售第"+i+"张票");
            i++;
           }
 }       
  }
}
  1. TestThread类代码如下(TicketThread)的实现类
public class TestThread {
  public static void main(String[] args) {
    TicketThread th1 = new TicketThread("窗口1");
    TicketThread th2 = new TicketThread("窗口2");
    TicketThread th3 = new TicketThread("窗口3");
    TicketThread th4 = new TicketThread("窗口4");
    TicketThread th5 = new TicketThread("窗口5");
    th1.start();
    th2.start();
    th3.start();
    th4.start();
    th5.start();
  }
}

Runnable实现方式

  1. TicketRunnable类代码如下:
public class TicketRunnable implements Runnable {
  Thread th = Thread.currentThread();
  int i = 1;
  public void run() {
    while (i <= 96) {
      try {
        th.sleep(50);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      synchronized (this) {
        System.out.println(Thread.currentThread().getName() + ",出售第" + i + "张票");
        i++;
      }
    }
  }
}
  1. TestRunnable类代码如下(TicketRunnable的实现类)
public class TestRunnable {
  public static void main(String[] args) {
    TicketRunnable  tr =new TicketRunnable();
    Thread th1 = new Thread(tr,"窗口1");
    Thread th2 = new Thread(tr,"窗口2");
    Thread th3 = new Thread(tr,"窗口3");
    Thread th4 = new Thread(tr,"窗口4");
    Thread th5 = new Thread(tr,"窗口5");
    th1.start();
    th2.start();
    th3.start();
    th4.start();
    th5.start();
  }
}
目录
相关文章
|
29天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
37 1
|
2月前
|
存储 监控
【Azure Cloud Service】在Azure云服务中收集CPU监控指标和IIS进程的DUMP方法
在使用Cloud Service服务时,发现服务的CPU占用很高,在业务请求并不大的情况下,需要直到到底是什么进程占用了大量的CPU资源,已经如何获取IIS进程(w3wp.exe)的DUMP文件?
|
6月前
|
Linux
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
|
2月前
|
编译器
【收藏】内核级利用通用Hook函数方法检测进程
【收藏】内核级利用通用Hook函数方法检测进程
|
3月前
|
数据安全/隐私保护 异构计算 Windows
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter
|
3月前
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
3月前
|
机器学习/深度学习 数据可视化 搜索推荐
低代码开发是一种能够加速软件研发进程的高效开发方法
【8月更文挑战第4天】低代码开发是一种能够加速软件研发进程的高效开发方法
52 0
|
6月前
|
Python
多ip多进程代理的实现方法
多ip多进程代理的实现方法
189 7
|
6月前
|
消息中间件 缓存 监控
【C++ 观察者模式的应用】跨进程观察者模式实战:结合ZeroMQ和传统方法
【C++ 观察者模式的应用】跨进程观察者模式实战:结合ZeroMQ和传统方法
256 1
|
6月前
|
监控 Linux 调度
【Linux】对进程PCB的理解&&查看进程信息的方法
【Linux】对进程PCB的理解&&查看进程信息的方法
155 0