zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    数据库连接单例模式
    魔术方法
    序列化与反序列化
    设计模式
    类的自动加载
    错误处理
    匿名类--php7.0以上
    OpenCV中HSV颜色模型及颜色分量范围
    Opencv 轮廓提取
    opencv 二值化_OpenCV二值图像案例分析精选 | 第二期
  • 原文地址:https://www.cnblogs.com/zywf/p/4716201.html
Copyright © 2011-2022 走看看