百天打卡计划第11天-编程题:设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少1。写出程序。

题目:设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少1。写出程序。

package day0518;

/**
 * @author liw
 * @date 2020-07-12
 */
public class Demo1 {

    private static int j = 0;

    public static void main(String[] args) {
        Demo1 demo1 = new Demo1();
        Inc inc = demo1.new Inc();
        Dec dec = demo1.new Dec();
        for (int i = 0; i < 2; i++) {
            Thread thread = new Thread(inc);
            thread.start();
            Thread thread1 = new Thread(dec);
            thread1.start();
        }

    }

    public void inc() {
        j++;
        System.out.println(Thread.currentThread().getName() + "icn j=" + j);
    }

    public void dec() {
        j--;
        System.out.println(Thread.currentThread().getName() + "dec j=" + j);
    }

    class Inc implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 50;i++)
                inc();
        }
    }

    class Dec implements Runnable {

        @Override
        public void run() {
            for (int i = 0; i < 50;i++)
            dec();
        }
    }
}
好的,这是一个很有趣的问题!首先,我们需要设计一个数据结构来存储学生的信息,包括姓名、进入时间和离开时间。我们可以使用一个字典(dictionary)来存储每个学生的信息。字典的键是学生的姓名,值是一个列表,包括进入时间和离开时间。当学生进入时,我们可以将他们的姓名和当前时间作为字典的一个键值对存储起来;当学生离开时,我们可以将他们的离开时间添加到列表中。这样的话,我们就可以轻松地跟踪每个学生的信息。 接下来,我们需要考虑如何处理多个学生在同一时间使用打卡机的情况。为了解决这个问题,我们可以使用信号量来控制对打卡机的访问。我们可以定义一个信号量,初始值为 1,每当有学生进入或离开时,我们就会尝试获取信号量。如果信号量的值为 1,则我们可以继续使用打卡机;如果值为 0,则说明有另一个学生正在使用打卡机,我们需要等待一段时间后再尝试获取信号量。这样,我们就可以确保同一时间只有一个学生在使用打卡机。 最后,我们需要实现一个动态的显示系统,以便我们可以随时了解自习室的情况。我们可以使用一个线程来处理显示的逻辑。这个线程可以定期(例如每 5 秒钟)从字典中读取学生信息,并将其显示在屏幕上。我们还可以在每次有学生进入或离开时,使用一个信号量来通知显示线程更新信息。 在 Linux 下,我们可以使用 Python 编写这个程序。下面是一个基本的框架: ```python import threading import time # 存储学生信息的字典 students = {} # 信号量,控制对打卡机的访问 semaphore = threading.Semaphore(1) # 显示线程 class DisplayThread(threading.Thread): def run(self): while True: # TODO: 从字典中读取学生信息并显示在屏幕上 time.sleep(5) # 进入自习室的函数 def enter(name): # 尝试获取信号量 semaphore.acquire() # TODO: 记录学生进入时间 # TODO: 将学生信息存储到字典中 # 释放信号量 semaphore.release() # 离开自习室的函数 def leave(name): # 尝试获取信号量 semaphore.acquire() # TODO: 记录学生离开时间 # TODO: 从字典中删除学生信息 # 释放信号量 semaphore.release() # 主函数 if __name__ == '__main__': # 创建显示线程并启动 display_thread = DisplayThread() display_thread.start() # TODO: 创建多个进程或线程来模拟学生进入和离开自习室 ``` 这只是一个基本的框架,还需要根据具体需求进行完善。例如,我们还需要考虑如何处理学生数量超过自习室容量的情况,如何处理进入或离开自习室的异常情况等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个双鱼座的测开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值