java多线程的生产者模式和消费者模式共同使用,实现交替输出功能:假设只有两个线程,输出以下结果: t1-->1, t2-->2, t1-->3, t2-->4...

要求:必须交替,并且t1线程负责输出奇数。t2线程负责输出偶数。
两个线程共享一个数字,每个线程执行时都要对这个数字进行:++

创建Number类,只有一个属性private int number

package Thread.Homework;


public class Number {
    private int number;

    public Number(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return String.valueOf(number);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Number number1 = (Number) o;
        return number == number1.number;
    }

}

创建负责输出奇数的线程类

package Thread.Homework;

public class OddNumThread implements Runnable {
    private Number number;

    public OddNumT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解决这个问题。你可以使用一个共享的队列来实现。其中一个线程作为生产者,负责往队列中添加数据,另一个线程作为消费者,负责从队列中取出数据并输出以下是一个简单的 Python 代码示例: ```python import threading import time queue = [] condition = threading.Condition() class ProducerThread(threading.Thread): def run(self): global queue nums = range(1, 5) global condition for num in nums: condition.acquire() queue.append(num) print("t1 --->", num) condition.notify() condition.release() time.sleep(1) class ConsumerThread(threading.Thread): def run(self): global queue global condition while True: condition.acquire() if not queue: print("t2 waiting") condition.wait() print("t2 notified") num = queue.pop(0) print("t2 --->", num) condition.release() time.sleep(1) producer = ProducerThread() consumer = ConsumerThread() producer.start() consumer.start() ``` 在这个示例中,我们定义了一个队列和一个条件变量 `condition`。生产者线程 `ProducerThread` 负责往队列中添加数据,并在添加完数据后使用 `notify()` 方法通知消费者线程 `ConsumerThread` 可以取出数据了。消费者线程则负责从队列中取出数据并输出使用 `acquire()` 和 `release()` 方法来加锁和解锁,保证线程安全。当队列为空时,消费者线程会调用 `wait()` 方法等待通知。 运行这个程序,你会得到以下输出: ``` t1 ---> 1 t2 waiting t1 ---> 2 t2 notified t2 ---> 1 t1 ---> 3 t2 waiting t1 ---> 4 t2 notified t2 ---> 2 t2 ---> 3 t2 ---> 4 ``` 可以看到,两个线程交替输出了所需的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值