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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周斌 中级黑马   /  2012-11-2 19:35  /  1335 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周斌 于 2012-11-7 12:04 编辑

  单例模式为了创建对象唯一执行操作,线程同步也是执行操作只有一个对象,这两者有什么关系。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 焦晨光 于 2012-11-2 19:44 编辑

单例模式是保证对象在内存中只能存在一个
属于数据共享

线程同步是保证同一个对象同时只能被一个线程访问
属于数据同步 亦属于数据共享

两者没有直接联系,有共同点:数据共享!~

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
焦晨光 发表于 2012-11-2 19:43
单例模式是保证对象在内存中只能存在一个
属于数据共享

问一下,能否举些例子体现出单例模式用于数据共享,万分谢谢
回复 使用道具 举报
class Student
{
        private int age;
        private static Student s = new Student();
        private Student(){}
        public static Student getStudent()
        {
                return s;
        }
        public void setAge(int age)
        {
                this.age = age;
        }
        public int getAge()
        {
                return age;
        }
}

class SingleDemo
{
        public static void main(String[] args)
        {
               
                Student s1 = Student.getStudent();
                Student s2 = Student.getStudent();
                //上述两行代码指向的是同一个Student对象,这就是和new创建的对象最大的区别
                //总之,单例设计模式用在只操作一个对象的时候很方便
        }
回复 使用道具 举报
class Student
{
        private int age;
        private static Student s = new Student();
        private Student(){}
        public static Student getStudent()
        {
                return s;
        }
        public void setAge(int age)
        {
                this.age = age;
        }
        public int getAge()
        {
                return age;
        }
}

class SingleDemo
{
        public static void main(String[] args)
        {
               
                Student s1 = Student.getStudent();
                Student s2 = Student.getStudent();
                //上述两行代码指向的是同一个Student对象,这就是和new创建的对象最大的区别
                //总之,单例设计模式用在只操作一个对象的时候很方便
        }
回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-11-2 21:33 编辑

1、线程同步允许一次只有一个线程访问共享资源。使用同步关键字synchronized来进行标识。同步可分为同步方法和同步块。
2、使用线程同步有可能造成死锁,为避免这种情况,java提供了线程间通信机制。实现线程之间通信的三个方法是wait(),notify()和notifyAll()。这三个方法是类Object中定义的方法,只能用于synchronized方法中。调用wait()方法,使线程进入等待池。调用notify()方法,唤醒等待池中第一个等待的线程。调用notifyAll()方法,唤醒多个在等待的线程。
3、单例模式也叫单态模式或Singleton模式。运行期间能且只能产生一个对象。如:
public class Singleton {
    private static Singleton instance = null;
    private Singleton() {
    }

    public static Singleton getInstance() {

       if (instance == null) {//这次判断将所有非第一次产生对象的线程排除

           synchronized (Singleton.class) {//都是第一次产生对象的线程在此排队

              if (instance == null) {//只允许第一个进入同步块的线程产生对象

                  instance = new Singleton();

              }

           }

       }

       return instance;
    }
}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马