您现在的位置是:主页 > news > 建网站带支付链接/seo做关键词怎么收费的
建网站带支付链接/seo做关键词怎么收费的
admin2025/5/18 18:53:29【news】
简介建网站带支付链接,seo做关键词怎么收费的,哈密做网站,广州网页设计网站/*问题1:生产和消费毫无规律性可言,可能先消费后生产也可能先消费后生产,也就是产生了线程安全问题原因:生产和消费操作了共有的数据,并且有多条对共享数据的操作解决办法:使用同步。问题2:同步…
/*
问题1:生产和消费毫无规律性可言,可能先消费后生产也可能先消费后生产,也就是产生了线程安全问题
原因:生产和消费操作了共有的数据,并且有多条对共享数据的操作
解决办法:使用同步。
问题2:同步以后线程安全问题解决了,但是出现了连续生产和重复消费的问题
解决办法:使用等待唤醒机制
问题3:多生产多消费后遇到生产者和消费者同时生产和消费的问题
解决方法:使用循环方法判断商品状态
问题4:程序出现假死状态
原因:notify每次随机唤醒线程池中的一个线程,有可能是生产者也有可能是消费者,
这时有可能线程池中的线程都处于等待wait状态,程序假死
解决方法:最理想的办法是生产者唤醒消费者(消费者唤醒生产者),但是没有使用的方法,所以只能选择notifyAll()
总结:每次唤醒所有线程,浪费了资源。
wait(),notyfy()和notifyAll属于同步函数的锁,锁在同步代码块中可以是任意对象,所以他们可以属于任意对象,但在同步函数内属于this
*/
//仓库
class Warehouse
{
private String name;
//计数器生产产品的数量
private int count=0;
//定义标记记录产品状态
private boolean flag=false;
//生产方法
public synchronized void set(String name)
{
if(flag)
try{wait();}catch(InterruptedException e){}
this.name=name+"..."+count;
count++;
System.out.println(Thread.currentThread().getName()+"..生产.."+this.name);
flag=true;
notify();
}
//消费方法
public synchronized void get()
{
if(!flag)
try{wait();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"...消费..."+this.name);
flag=false;
notify();
}
}
class Producer implements Runnable
{
private Warehouse w;
Producer(Warehouse w)
{
this.w=w;
}
public void run()
{
while(true)
w.set("套餐一");
}
}
class Customer implements Runnable
{
private Warehouse w;
Customer(Warehouse w)
{
this.w=w;
}
public void run()
{
while(true)
w.get();
}
}
class ProducerCumstomer
{
public static void main(String[] args)
{
Warehouse w=new Warehouse();
Producer p=new Producer(w);
Customer c=new Customer(w);
Thread t1=new Thread(p);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}