Terracotta 更接近于“分层”模型——所有客户端应用程序都与 Terracotta 服务器阵列通信(更重要的是,它们不会相互通信)。Terracotta 服务器阵列能够为规模和可用性进行集群(镜像,用于可用性,条带化,用于规模)。
无论如何,正如您可能知道的那样,Terracotta 使您能够像在单个 JVM 中一样通过使用 POJO 同步/等待/通知或使用任何 java.util.concurrent 原语(例如 ReentrantReadWriteLock)来表达跨集群的并发性, CyclicBarrier, AtomicLong, FutureTask 等等。
Terracotta Cookbook中有很多简单的食谱展示了这些原语的用法。
作为示例,我将发布 ReentrantReadWriteLock 示例(注意没有“Terracotta”版本的锁 - 您只需使用普通的 Java ReentrantReadWriteLock)
import java.util.concurrent.locks.*;
public class Main
{
public static final Main instance = new Main();
private int counter = 0;
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(true);
public void read()
{
while (true) {
rwl.readLock().lock();
try {
System.out.println("Counter is " + counter);
} finally {
rwl.readLock().unlock();
}
try { Thread.currentThread().sleep(1000); } catch (InterruptedException ie) { }
}
}
public void write()
{
while (true) {
rwl.writeLock().lock();
try {
counter++;
System.out.println("Incrementing counter. Counter is " + counter);
} finally {
rwl.writeLock().unlock();
}
try { Thread.currentThread().sleep(3000); } catch (InterruptedException ie) { }
}
}
public static void main(String[] args)
{
if (args.length > 0) {
// args --> Writer
instance.write();
} else {
// no args --> Reader
instance.read();
}
}
}