本帖最后由 jiangwenjun 于 2015-1-30 03:44 编辑
- /*
- 有一个资源
- 一个线程往里存东西,如果里边没有的话
- 一个线程往里取东西,如果里面有得话
- */
-
- //资源
- class Resource
- {
- private String name;
- private String sex;
- private boolean flag=false;
-
- public synchronized void setInput(String name,String sex)
- {
- if(flag)
- {
- try{wait();}catch(Exception e){}//如果有资源时,等待资源取出
- }
- this.name=name;
- this.sex=sex;
-
- flag=true;//表示有资源
- notify();//唤醒等待
- }
-
- public synchronized void getOutput()
- {
- if(!flag)
- {
- try{wait();}catch(Exception e){}//如果木有资源,等待存入资源
- }
- System.out.println("name="+name+"---sex="+sex);//这里用打印表示取出
-
- flag=false;//资源已取出
- notify();//唤醒等待
- }
- }
-
-
- //存线程
- class Input implements Runnable
- {
- private Resource r;
- Input(Resource r)
- {
- this.r=r;
- }
- public void run()//复写run方法
- {
- int x=0;
- while(true)
- {
- if(x==0)//交替打印张三和王羲之
- {
- r.setInput("张三",".....man");
- }
- else
- {
- r.setInput("王羲之","..woman");
- }
- x=(x+1)%2;//控制交替打印
- }
- }
- }
-
- //取线程
- class Output implements Runnable
- {
- private Resource r;
- Output(Resource r)
- {
- this.r=r;
- }
- public void run()//复写run方法
- {
- while(true)
- {
- r.getOutput();
- }
- }
- }
-
-
-
- class ResourceDemo2
- {
- public static void main(String[] args)
- {
- Resource r = new Resource();//表示操作的是同一个资源
-
- new Thread(new Input(r)).start();//开启存线程
-
- new Thread(new Output(r)).start();//开启取线程
- }
- }
请问一下 这里 new Input(r); new Output(r); 是指向同一个对象? 还是说同一个资源两个线程?本来就是要分开指向不同对象的呢? 这里我不懂了 不是存new Thread()里面是同一对象才能保证吗? |
|