java线层的启动与停止

class Do8
{
    public static void main(String[] args) 
    {
           Resource r =new Resource();
           
           Input in =new Input(r);
           Output out=new Output(r);
            Thread t1=new Thread(in);
            Thread t2=new Thread(out);
            t1.start();
            t2.start();
    }
}

class Resource
{
    String name;
    String sex;
    boolean flag=false;
}
//输入
class Input implements Runnable
{
    Resource r;
    Input(Resource r)
    {
    this.r=r;
    }
    public void run()
    {
    int x=0;
    while(true)
        {
        synchronized(r)
            {
           if(r.flag)
                {
            try{r.wait();}catch(Exception e){}//为真的时候,当前线层停止
                }
               if(x==0)
                    {
                    r.name="往里";
                    r.sex="男";
                     }
                     else
                    {
                      r.name="xiaoli";
                      r.sex="wumen";
                     }
                     r.flag=true;
                r.notify();//启动任意的停止的线层
                 
              }
                
            x=(x+1)%2;    
            
        }
    }
}
//输出
class Output implements Runnable
{
    Resource r;
    Output(Resource r)
    {
    this.r=r;
    }
    public void run()
    {
        while(true)
        {
            synchronized(r)
                {
                if(!r.flag)
                    {
                    try{r.wait();}catch(Exception e){}//不为真的时候,当前线层停止
                    }
                    try{Thread.sleep(100);}catch(Exception e){}
                    System.out.println(r.name+"..."+r.sex);
                    r.flag=false;
                    r.notify();//启动任意的停止的线层
                    
                }
        }
    }
}

 练习

    
class Do9 
{
    public static void main(String[] args) 
    {
        Resource r=new Resource();
        Shengchan sc=new Shengchan(r);
        Xiaoshou xs=new Xiaoshou(r);
        Thread th1=new Thread(sc);
        Thread th2=new Thread(xs);
        th1.start();
        th2.start();
    }
}

class Resource
{
    private String name;
    private int count=1;
    private boolean flag=false;
    public synchronized void set(String name)
    {
        if(flag)
            try{this.wait();}catch(InterruptedException e){}
        this.name=name+count;
        count++;
        System.out.println(Thread.currentThread().getName()+"..生产者.."+this.name);
        flag=true;
        notify();
    }
    public synchronized void out()
    {
        if(!flag)
            try{this.wait();}catch(InterruptedException e){}
    System.out.println(Thread.currentThread().getName()+"..消费者........"+this.name);
    flag=false;
    notify();
    }
}
class Shengchan implements Runnable
{
    private Resource r;

    Shengchan(Resource r)
    {
    this.r=r;
    }
    public void run()
    {
      while(true)
        {
          try{Thread.sleep(150);}catch(InterruptedException e){}
        r.set("烤鸭");
        }
    }

}
class Xiaoshou implements Runnable
{
     private Resource r;
     Xiaoshou(Resource r)
    {
     this.r=r;
     }
    public void run()
    {
    while(true)
        {
        try{Thread.sleep(150);}catch(InterruptedException e){}
        r.out();
        }
    }
}
原文地址:https://www.cnblogs.com/zywf/p/4716201.html