这是用的最多的一种设计模式就不多说了,这里注意一下多线程环境下的同步问题
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(); } }}
新闻热点
疑难解答