java新版中唤醒指定线层对象

import java.util.concurrent.locks.*;
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(sc);
        Thread th3=new Thread(xs);
        Thread th4=new Thread(xs);
        th1.start();
        th2.start();
        th3.start();
        th4.start();
    }
}

class Resource
{
    private String name;
    private int count=1;
    private boolean flag=false;
    //创建一个锁对像
    Lock lock=new ReentrantLock();

    //通过已经有的锁获取该锁上的监视器对象
    Condition shengchan_con=lock.newCondition();//创建生产者对象
    Condition xiaofei_con=lock.newCondition();//创建消费者对象

    public  void set(String name)
    {
        lock.lock();
        try
        {
            while(flag)
                try{shengchan_con.await();}catch(InterruptedException e){}
        this.name=name+count;
        count++;
        System.out.println(Thread.currentThread().getName()+"..生产者.."+this.name);
        flag=true;
        xiaofei_con.signal();
        }
        finally{
        lock.unlock();
        }

    }
    public synchronized void out()
    {
        lock.lock();
        try
        {
            while(!flag)
            try{xiaofei_con.await();}catch(InterruptedException e){}
    System.out.println(Thread.currentThread().getName()+"..消费者........"+this.name);
    flag=false;
    shengchan_con.signal();
        }
        finally{
        lock.unlock();
        }

    }
}
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();
        }
    }
}
时间: 2024-10-13 12:59:51

java新版中唤醒指定线层对象的相关文章

JAVA编程中的类和对象

1:初学JAVA,都知道JAVA是面向对象的编程.笔者这节开始说说类和对象.(实例仅供参考,如若复制粘贴记得修改包名和类名,避免出错) 学习JAVA的快捷键,Alt+/代码补全功能,其实此快捷键启动了Eclipse代码辅助菜单,Shift+Ctrl+o快捷键导入包 Ctrl+F可以快速查找API,中文版API,百度云链接:http://pan.baidu.com/s/1slQWhCL 密码:cfxo 首先 对象的创建:类名  对象名=new 类名();也许大多数学习java的都会写,但是理解方面

Java Map中key用可变对象会是什么后果?

结论:put之后key变化了在get就get为null了 Scala代码 val map = new mutable.HashMap[java.util.List[String], String]() val key = new util.ArrayList[String]() map.put(key, "value") println(map) println(map.get(key).getOrElse("null")) key.add("11&quo

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

Java虚拟机:如何判定哪些对象可回收?

版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在堆内存中存放着Java程序中几乎所有的对象实例,堆内存的容量是有限的,Java虚拟机会对堆内存进行管理,回收已经"死去"的对象(即不可能再被任何途径使用的对象),释放内存.垃圾收集器在对堆内存进行回收前,首先要做的第一件事就是确定这些对象中哪些还存活着,哪些已经死去.Java虚拟机是如何判断对象是否可以被回收的呢? 引用计数算法        引用计数算法的原理是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

Java开发中的23种设计模式

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 1.开闭原则(Open Clo

Java开发中的23种设计模式详解

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

Java开发中的23种设计模式详解(转载)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

Java开发中的23种设计模式介绍

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周