单例模式
不用说,线程池等。
不变模式
一个类的内部状态创建后,在整个生命周期都不会发生改变,就是不变类。
不变模式不需要同步。
// final无子类
public final class Person{
private final String name;
public Person(String name){
this.name = name;
}
public String getName(){
return name;
}
}
不变类
- java.lang.String
- java.lang.Boolean
- java.lang.Byte
- java.lang.Float
- java.lang.Double
- java.lang.Integer
- java.lang.Long
- java.lang.Short
- java.lang.Character
如:i++,其实是新建了Integer,替换了引用。
Future模式
核心思想是异步调用。
一真一外壳实现同一接口,外部接口拿到外壳,可以先做其他的操作,在用的时候取壳子里面的真实数据(充分利用等待时间)。
- FutureTask<V>:实现了RunnableFuture接口。
- RunnableFuture<V>:实现了Runnable和Future<V>接口。
- Callable<V>:接口,具有get方法。
- ExecutorService.submit(FutureTask future):可以向线程池提交一个实现了Callable的任务,可以在后面调用future的get方法。
生产者消费者模式
使用BlockingQueue即可完成目标,但是并发度不高,可以自己封装ConcurrentLinkedQueue去完成高并发的缓冲队列。
// 生产者
while(true){
//...生产
queue.offer(data); // 队列满阻塞
}
// 消费者
while(true){
Data data = queue.take(); // 队列空阻塞
//...消费
}