这是用的最多的一种设计模式就不多说了,这里注意一下多线程环境下的同步问题
java实现代码:
package com.liu.pattern5;
import java.util.concurrent.locks.ReentrantLock;
public class Single {
private static Single single;
private static ReentrantLock lock = new ReentrantLock();
public static Single getInstance(){
lock.lock();
try{
if(single==null){
single = new Single();
}
return single;
}finally{
lock.unlock();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
t1.start();
t2.start();
t3.start();
}
}
class MyThread extends Thread{
public void run(){
Single s = Single.getInstance();
}
}
c#实现代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace com.liu.pattern5
{
class Single
{
private static Single single;
private static Object _lock = new Object();
public static Single GetInstance()
{
lock (_lock)
{
if (single == null) {
single = new Single();
}
return single;
}
}
public static void Run(){
System.Console.WriteLine(Thread.CurrentThread.Name);
Single.GetInstance();
}
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(Run));
Thread t2 = new Thread(new ThreadStart(Run));
t1.Name = "t1";
t2.Name = "t2";
t1.Start();
t2.Start();
t1.Join();
t2.Join();
System.Console.ReadKey();
}
}
}