java - 如何在不使用 if-else、while、for 等的情况下使用信号量

标签 java multithreading semaphore

这是家庭作业,但我只是在寻找正确方向的插入(而不是有人为我做我的工作)。

  • 我有四个线程
  • 它们各自循环打印出自己的数字:分别为 1、2、4 和 8
  • 在主程序开始时,我必须启动所有四个线程,然后在 500 毫秒后结束它们
  • 我要使用信号量来确保只有这些数字以这种重复模式打印:111111112222448111111112222448111111112222448……
  • 我不会使用 while、for、if、else 等。
  • 我正在使用 Java

我不知道如何在不使用 if 语句的情况下明确地打印出该模式,而且我对信号量非常不熟悉,对线程也只有一点熟悉。

哪位好心人能给我指点一下吗?即使您只是向我指出精彩的视频或文章,我也会感激不尽。

编辑:抱歉。我让事情变得困惑了。每个线程内已经为我定义了 while 语句。每个 while 语句一次仅打印其中一个数字。例如:它打印“1”而不是“11111”。就是不允许我定义任何更多 while 语句等。

最佳答案

如果您使用 Java 的信号量,我假设对 acquire() 的调用会阻塞。因此,考虑到这一点,如果一个线程试图获取一个已被另一个线程获取的信号量,则它必须等待 直到可以免费获取

关于java - 如何在不使用 if-else、while、for 等的情况下使用信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19667495/

相关文章:

c++ - Linux下调用semget()时EINVAL

c - 信号量和同步中的段错误

java - 应用程序的 CPU 使用率比其他正常 Web View 高

java - 使用不同的线程迭代 ConcurrentSkipListSet 删除元素

java - 在 DataOutputStream 上同步

c++ - 在构造函数中注册 weak_ptr 观察者

c# - Java 和 C# 的并行开发

java - CRC纠错库?

java - AlphaComposite.Clear 的错误,它认为其背景是黑色

linux - 未命名信号量(通过 sem_init)是纯用户空间吗?