A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Rec
{
        private String name;
        private String user;
        private boolean flag;
        private int count=100;
        private final ReentrantLock lock=new ReentrantLock();
        private Condition condition_input=lock.newCondition();
        private Condition condition_output=lock.newCondition();
        private Rec rec(){}
        private static Rec rec=null;
        public static Rec getInstance()
        {
                if (rec==null)
                {
                        synchronized(Rec.class)
                        {
                                if (rec==null)
                                {
                                        rec=new Rec();
                                }
                        }
                }
                return rec;
        }
        public void input(String name,String user)
        {
                lock.lock();
                try
                {
                        while (flag)
                        {
                                try
                                {
                                        condition_input.await();       
                                }
                                catch (Exception e)
                                {
                                }
                                if (count>0)
                                {
                                        this.name=name;
                                        this.user=user;
                                        System.out.println(Thread.currentThread().getName()+"...公司:"+name+"...用户..."+user+"..."+"已存入数据库...还有"+count+"客户需要存储");
                                        flag=true;
                                        condition_output.signalAll();
                                }
                                else
                                {
                                        System.out.println("数据库已经存满了,如果需要扩容,请再交钱!");
                                        System.exit(0);
                                }
                        }
                }
                finally
                {
                        lock.unlock();
                }
        }
        public void output()
        {
                lock.lock();
                try
                {
                        while (!flag)
                        {
                                try
                                {
                                        condition_output.await();
                                }
                                catch (Exception e)
                                {
                                }
                                System.out.println(Thread.currentThread().getName()+"..获得的数据是...公司:" +name + "用户:"+ user+"里面还有"+count--+"个用户");
                                flag=false;
                                condition_input.signal();
                        }
                }
                finally
                {
                        lock.unlock();
                }
        }
}
class Input implements Runnable
{
        private Rec r;
        Input(Rec r)
        {
                this.r=r;
        }
        public void run()
        {
                int x=0;
                while (true)
                {
                        try
                        {
                                Thread.sleep(20);
                        }
                        catch (Exception e)
                        {
                        }
                        if (x==0)
                        {
                                r.input("CSDN社区","狼行天下");
                        }
                        else
                                r.input("黑马程序员","jeromechen");
                        x=(x+1)%2;
                }
        }
}
class Output implements Runnable
{
        private Rec r;
        Output(Rec r)
        {
                this.r=r;
        }
        public void run()
        {
                while (true)
                {
                        try
                        {
                                Thread.sleep(20);
                        }
                        catch (Exception e)
                        {
                        }
                        r.output();
                }
        }
}
class  InputOutputTest2
{
        public static void main(String[] args)
        {
                Rec r=Rec.getInstance();
                new Thread(new Input(r)).start();
                new Thread(new Output(r)).start();
                new Thread(new Input(r)).start();
                new Thread(new Output(r)).start();
        }
}
我用的是最新的JDK8.0,打开API里面有这些功能,但是不清楚为什么编译的时候总是说找不到和Lock相关的符号。1.8对应API:http://docs.oracle.com/javase/8/docs/api/index.html
D:AFQI$7X%5BS0NUPG)V)C9OE%9.png

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
希望大牛们帮忙解决,会有技术分奖励,谢谢!
回复 使用道具 举报
导了没
import java.util.concurrent.locks.*

评分

参与人数 1黑马币 +5 收起 理由
jeromechen + 5 赞一个!

查看全部评分

回复 使用道具 举报 1 0
luofeng 发表于 2014-9-29 22:21
导了没
import java.util.concurrent.locks.*

导了,我还特意查了JDK8的API,里面的Lock是接口了,不过ReentrantLock类里可以创建对象,但是不知道为什么对于和Lock相关的在编译里都出现找不到符号。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马