一.使用java8lambd测试
main方法中:
IntStream.range(0,10).forEach(
i->new Thread(()->System.out.println(Thread.currentThread().getName()+"=====>>>>"+SingleTest.getInstance())).start());
二.使用Set集合验证
1
2
3
4
5
6
7
8
9
10
11
public
class
ThreadTest
implements
Runnable {
//存放单例对象,使用Set是为了不存放重复元素
public
Set singles =
new
HashSet();
@Override
public
void
run() {
//获取单例
SingleDemo s = SingleDemo.getInstance();
//添加单例
singles.add(s);
}
}
使用多线程并发访问单例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public
class
ThreadDemo3 {
public
static
void
main(String[] args) {
// SingleDemo s1 = SingleDemo.getInstance();
// SingleDemo s2 = SingleDemo.getInstance();
// System.out.println(s2 == s2);
ThreadTest t =
new
ThreadTest();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
System.out.println(t.singles);
}
}
//看不出结果改成下面这样 同时在懒汉式取单例方法中添加Thread.sleep(50);//让多个线程竞争
public
class
ThreadDemo3 {
public
static
void
main(String[] args) {
// SingleDemo s1 = SingleDemo.getInstance();
// SingleDemo s2 = SingleDemo.getInstance();
// System.out.println(s2 == s2);
ThreadTest t =
new
ThreadTest();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
new
Thread(t).start();
try
{
Thread.sleep(
2000
);//让主线程等等子线程任务执行
}
catch
(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(t.singles);
}
}