茴香豆的茴的写法有以下几种,分别是茴,回,囘,囬。
单例有几种实现方法
8种,有一种懒汉单例使用了 DCL。
单例的指令重排。volatile 可以在单例双重检查中实现可见性和禁止指令重排序,从而保证安全性。
静态内部类,线程安全
饿汉,线程安全
创建一个线程有几种方式
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
import org.junit.Test;
import java.util.List;
import java.util.concurrent.*;
public class ThreadTest {
class ThreadA extends Thread {
public ThreadA(String name) {
super(name);
}
@Override
public void run() {
super.run();
System.out.println("我是继承Thread的线程:" + this.getName());
}
}
class ThreadB implements Runnable {
@Override
public void run() {
System.out.println("我是实现Runnable接口的线程");
}
}
class ThreadD implements Callable<List<Integer>> {
@Override
public List<Integer> call() throws Exception {
System.out.println("我是实现Callable接口的线程");
return null;
}
}
/**
* 测试线程的实现方式
*/
@Test
public void newThread() {
// 方式一
new ThreadA("线程A").start();
// 方式二
new Thread(new ThreadB()).start();
// 方式三:
Thread threadC = new Thread() {
@Override
public void run() {
super.run();
System.out.println("我是匿名线程:" + this.getName());
}
};
threadC.setName("线程C");
threadC.start();
// 方式四:FutureTask 实现了 Runnable 接口
ThreadD threadD = new ThreadD();
FutureTask<List<Integer>> futureTask = new FutureTask<>(threadD);
new Thread(futureTask).start();
// 方式五:利用线程池,配置线程创建后的回调对象
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println("我是线程池的 Runnable 实现");
}
});
// 方式六:也是线程池,不过配置的对象实现接口不同
executorService.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
System.out.println("我是线程池的 Callable 实现");
return null;
}
});
System.out.printf("主线程:%s%n", Thread.currentThread().getName());
}
}
|
执行结果:
1
2
3
4
5
6
7
|
我是继承Thread的线程:线程A
我是实现Runnable接口的线程
我是匿名线程:线程C
我是实现Callable接口的线程
我是线程池的 Runnable 实现
主线程:main
我是线程池的 Callable 实现
|
继承java.lang.Thread类
实现Runnable接口的java.lang.Runnable#run方法
Thread的匿名类
Java有几种内部类
4种,成员,匿名,局部,静态。
获取 Class 类实例的方法有几种
3种
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
|
/**
* 获取 Class 类实例有几种方式:3种
*/
@Test
public void severalInstance() {
// 方式一:类常量
Class<ClassTest> classTestClass = ClassTest.class;
// 方式二:getClass() 方法
Class<? extends ClassTest> aClass = this.getClass();
Class<?> classTest = null;
try {
// 方式三:forName
classTest = Class.forName("shali.tdl.lang.ClassTest");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 方式四:类加载器
ClassLoader classLoader = ClassTest.class.getClassLoader();
Class<?> aClass1 = null;
try {
aClass1 = classLoader.loadClass("shali.tdl.lang.ClassTest");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Assert.assertSame(aClass, classTestClass);
Assert.assertSame(aClass, classTest);
Assert.assertSame(aClass, aClass1);
}
|