黑马程序员技术交流社区
标题:
单例模式,线程同步
[打印本页]
作者:
周斌
时间:
2012-11-2 19:35
标题:
单例模式,线程同步
本帖最后由 周斌 于 2012-11-7 12:04 编辑
单例模式为了创建对象唯一执行操作,线程同步也是执行操作只有一个对象,这两者有什么关系。
作者:
焦晨光
时间:
2012-11-2 19:43
本帖最后由 焦晨光 于 2012-11-2 19:44 编辑
单例模式是保证对象在内存中只能存在一个
属于数据共享
线程同步是保证同一个对象同时只能被一个线程访问
属于数据同步 亦属于数据共享
两者没有直接联系,有共同点:数据共享!~
作者:
周斌
时间:
2012-11-2 19:48
焦晨光 发表于 2012-11-2 19:43
单例模式是保证对象在内存中只能存在一个
属于数据共享
问一下,能否举些例子体现出单例模式用于数据共享,万分谢谢
作者:
焦晨光
时间:
2012-11-2 19:59
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 20:00
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:30
本帖最后由 吴愿涛 于 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;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2