多线程浅解(1)

    技术2022-05-18  13

      多线程:生产者、消费者问题——多线程的经典案例,一直都晕晕乎乎,今天再看,稍微有了那么点心得就总结一下,加深一下印象。

    产生线程安全的原因:

      1、多线程

      2、操作共同资源

      生产者、消费者首先操作的是同一资源,所以要解决首先得解决操作时的同步问题,应该把两者各自的生产和消费函数用synchronized和同一锁旗标锁起来,但这事实上只是解决了生产和消费过程互不打扰,却并没有解决生产和消费的有序过程,如果要解决还要借助于Thread从Object继承的wait()方法和 notify()方法,即当生产者完成后notify()消费者,并wait()等待消费,消费者完成后notify()生产者并wait()生产代码如下(下面代码转用同步代码块,更简洁明了):

     class Producer implements Runnable {  Q q;  public Producer(Q q)  {   this.q=q;  }  public void run()  {   int i=0;   while(true)   {     if(i==0)     q.put("zhangsan","male");    else     q.put("lisi","female");     i=(i+1)%2;   }  } } class Consumer implements Runnable {  Q q;  public Consumer(Q q)  {   this.q=q;  }  public void run()  {   while(true)   {       q.get();   }  } } class Q {  String name="unknown";  String sex="unknown";  boolean bFull=false;  public synchronized void put(String name,String sex)      //使用代码块实现同步,简洁明了!!!  {   if(bFull)    try{wait();}catch(Exception e){}   this.name=name;   try{Thread.sleep(1);}catch(Exception e){}   this.sex=sex;   bFull=true;   notify();  }  public synchronized void get()  {   if(!bFull)    try{wait();}catch(Exception e){}   System.out.print(name);    System.out.println(":"+sex);    bFull=false;    notify();  } }


    最新回复(0)