题目是结论:
代码是测试用例,可自行通过修改注释切换单例与非单例
测试结果最后几行在 最下面.
package Thread;
import java.util.concurrent.CountDownLatch;
public class SingletonThreadSaveTest
{
private static SingletonThreadSaveTest ASTPMgr;
public static volatile int c = 0;
// public SingletonThreadSaveTest()
// {
//
// }
private SingletonThreadSaveTest(){}
public static SingletonThreadSaveTest getInstance()
{
if(ASTPMgr == null)
{
synchronized(SingletonThreadSaveTest.class)
{
if(ASTPMgr == null){
ASTPMgr = new SingletonThreadSaveTest();
}
}
}
return ASTPMgr;
}
public void add()
{
for (int i = 0; i < 10000; i++)
{
c++;
Thread current = Thread.currentThread();
System.out.println("Id:" + current.getId() +"Add:" + String.valueOf(c)+ " Name:" + current.getName() + " activeCount:" + Thread.activeCount() + "\r\n");
}
}
public void des()
{
for (int i = 0; i < 10000; i++)
{
c--;
Thread current = Thread.currentThread();
System.out.println("Id:" + current.getId() +"Des:" + String.valueOf(c)+ " Name:" + current.getName() + " activeCount:" + Thread.activeCount() + "\r\n");
}
}
/**
* @param args
*/
public static void main(String[] args)
{
final CountDownLatch controller = new CountDownLatch(2);
Thread current = Thread.currentThread();
System.out.println("Id:" + current.getId() + " Name:" + current.getName() + " activeCount:" + Thread.activeCount() + "\r\n");
new Thread(
new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
SingletonThreadSaveTest.getInstance().add();
//new SingletonThreadSaveTest().add();
controller.countDown();
}
}).start();
new Thread(
new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
SingletonThreadSaveTest.getInstance().des();
//new SingletonThreadSaveTest().des();
controller.countDown();
}
}).start();
try
{
controller.await();
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print("\r\n");
System.out.print(c);
}
}
Id:11Add:-6 Name:Thread-0 activeCount:2
Id:11Add:-5 Name:Thread-0 activeCount:2
Id:11Add:-4 Name:Thread-0 activeCount:2
Id:11Add:-3 Name:Thread-0 activeCount:2
Id:11Add:-2 Name:Thread-0 activeCount:2
-2