简单描述线程间的通信机制(等待和唤醒机制),完成生产者和消费者案例;

线程间通信:多个线程在处理同一资源,但是任务却不同

等待唤醒机制:

涉及方法: 
    1、wait():让线程处于冻结状态,被wait的线程会存储到线程池中    
    2、notify():唤醒线程池中任一线程(随机)
    3、nitifyAll():唤醒线程池中所有线程
这些方法必须定义在同步中,因为这些方法是用于操作线程状态的方法,必须要明确操作的是哪个锁上的线程
这些方法都定义在Object类中,因为这些方法都是监视器的方法,监视器其实就是锁,锁可以是任意的对象,任意的对象调用的方式一定定义在Object类中
等待唤醒机制的示例:
未用等待唤醒:

//资源
class Resource
{
	String name;
	String sex;
}
 
 
//输入
class Input implements Runnable
{
	Resource r ;
//	Object obj = new Object();
	Input(Resource r)
	{
		this.r = r;
	}
	public void run()
	{
		int x = 0;
		while(true)
		{
			synchronized(r)
			{
				if(x==0)
				{
					r.name = "mike";
					r.sex = "nan";
				}
				else
				{
					r.name = "丽丽";
					r.sex = "女女女女女女";
				}
			}
			x = (x+1)%2;
 
		}
	}
}
//输出
class Output implements Runnable
{
 
	Resource r;
//	Object obj = new Object();
	Output(Resource r)
	{
		this.r = r;
	}
 
	public void run()
	{
		while(true)
		{
			synchronized(r)
			{
				System.out.println(r.name+"....."+r.sex);
			}
		}
	}
}
 
 
 
class  ResourceDemo
{
	public static void main(String[] args) 
	{
		//创建资源。
		Resource r = new Resource();
		//创建任务。
		Input in = new Input(r);
		Output out = new Output(r);
		//创建线程,执行路径。
		Thread t1 = new Threa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt是一个Python语言的图形用户界面(GUI)工具包,可以用于创建丰富和交互性强的图形界面应用程序。生产者-消费者模型是一种常见的并发编程模型,其中生产者生成数据并将其放入共享缓冲区,而消费者从缓冲区中取出数据进行处理。 在PyQt中,可以使用等待唤醒机制来实现生产者-消费者模型的可视化。 首先,创建一个共享的缓冲区,并设置其最大容量。使用Python中的Queue对象来实现这个缓冲区,并设置其最大长度。 然后,创建两个线程分别作为生产者消费者。在生产者线程中,使用一个循环来生成数据,并将其放入缓冲区中。当缓冲区已满时,生产者线程将等待缓冲区为空的信号。而在消费者线程中,同样使用一个循环来从缓冲区中取出数据进行处理。当缓冲区为空时,消费者线程将等待缓冲区有数据的信号。 使用PyQt的信号和槽机制,可以在生产者消费者中发送信号和接收槽,实现线程之间的通信。当缓冲区已满时,生产者发送一个信号通知消费者线程,然后等待消费者线程处理完数据后发送一个信号通知生产者继续生成数据。同样地,当缓冲区为空时,消费者发送一个信号通知生产者线程,然后等待生产者线程生成数据后发送一个信号通知消费者继续处理数据。 在主线程中,创建一个PyQt的应用对象,并将生产者消费者线程启动。然后,通过pyqtSignal来连接生产者消费者线程的信号和槽。可以为这些线程定义各自的信号和槽,以便与主线程和其他线程进行通信。 最后,通过调用应用对象的sys.exit方法,进入Qt事件循环,保持应用程序处于运行状态,直到所有线程都处理完毕。 通过以上步骤,我们可以用PyQt的等待唤醒机制实现生产者-消费者模型的可视化效果。当生产者消费者线程不断地进行生产和消费操作时,可以在图形界面中展示出来,实现生产者消费者的实时可视化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值