• Java多线程同步锁


    公用资源类Resource

    public class Resource 
    {
        private String name;
        private String sex;
        private boolean flag = false; //false表示未填数据,true表示已填数据
        
        public synchronized void set(String name,String sex)   //同步函数使用的锁是本实例对象即this
        {
            if(flag)
                try{this.wait();}catch(InterruptedException e){}
            this.name = name;
            this.sex = sex;
            flag = true;
            this.notify();
        }
        
        public synchronized void out()
        {
            if(!flag)
                try{this.wait();}catch(InterruptedException e){}
            System.out.println("姓名是: "+name+" 性别为"+sex);
            flag = false;
            this.notify();
        }
    
    }


    负责向资源类填数据的Input类

    public class Input implements Runnable 
    {
        private Resource r;
        
        public Input(Resource r)
        {
            this.r = r;
        }
    
        @Override
        public void run() 
        {
            int x =0 ;
            while(true)
            {
                if(x==0)
                    r.set("张三", "男");
                else
                    r.set("赵丽", "女");
                x=(x+1)%2;
            }
        }
    
    }

    负责从资源类中读数据的OutPut类

    public class OutPut implements Runnable 
    {
        private Resource r;
        
        public OutPut(Resource r)
        {
            this.r = r;
        }
    
        @Override
        public void run() 
        {
            while(true)
                r.out();
        }
    
    }

    测试类

    import org.junit.Test;
    
    public class Client 
    {
        Resource r = new Resource();
        Input i = new Input(r);
        OutPut o = new OutPut(r);
        
        Thread t1 = new Thread(i);
        Thread t2 = new Thread(o);
        
        @Test
        public void clientTest()
        {
            t1.start();
            t2.start();
        }
    
    }
  • 相关阅读:
    MySQL之SELECT用法
    Linux中find常见用法示例
    date命令
    backupMysql.sh
    Shell脚本中使用function(函数)示例
    zabbix邮件告警
    Zabbix系统数据采集方法总结
    TOMCAT原理详解及请求过程
    tomcat-users.xml 配置
    zabbix_sender用法实例
  • 原文地址:https://www.cnblogs.com/xiayangqiushi/p/3363047.html
Copyright © 2020-2023  润新知