Java 用于快速访问共享数据的单例Bean
关于单例Bean的使用,我有几个问题 首先让我描述一下情况。 有一个web应用程序,它将有许多客户端向它发送和接收数据。其中一些数据必须持久保存在数据库中,但我需要大部分数据在服务器上可用,以便快速访问并减轻数据库的压力 我将在共享空间中使用Singleton Bean,下面是我的问题:Java 用于快速访问共享数据的单例Bean,java,ejb,Java,Ejb,关于单例Bean的使用,我有几个问题 首先让我描述一下情况。 有一个web应用程序,它将有许多客户端向它发送和接收数据。其中一些数据必须持久保存在数据库中,但我需要大部分数据在服务器上可用,以便快速访问并减轻数据库的压力 我将在共享空间中使用Singleton Bean,下面是我的问题: 如果客户机_1尝试更新其在单例成员中的数据,而该单例成员当前被客户机_2写入锁定,那么客户机_1数据会发生什么情况?我是否需要为这种情况做准备,或者它像一个堆栈,并且他的写操作将在客户端完成后进行 如果我使用h
set
方法上放置@Lock(READ)
是否安全。在我看来,由于每个客户机只能写入自己的记录,因此没有必要阻止其他客户同时更新自己的记录- 使用
- 使用
- 使用
private final ReadWriteLock ReadWriteLock=new ReentrantReadWriteLock();
>
>私有最终锁readLock=readWriteLock.readLock();
>
>private final Lock writeLock=readWriteLock.writeLock();
>
>私有最终列表=新的ArrayList();
>
>公共无效集(EO)
> {
>writeLock.lock();
>试一试
> {
>列表。添加(o);
>System.out.println(“通过线程添加元素”+thread.currentThread().getName());
> }
>最后
> {
>writeLock.unlock();
> }
> }
- 使用
- 使用
- 使用
private final ReadWriteLock ReadWriteLock=new ReentrantReadWriteLock();
>
>私有最终锁readLock=readWriteLock.readLock();
>
>private final Lock writeLock=readWriteLock.writeLock();
>
>私有最终列表=新的ArrayList();
>
>公共无效集(EO)
> {
>writeLock.lock();
>试一试
> {
>列表。添加(o);
>System.out.println(“通过线程添加元素”+thread.currentThread().getName());
> }
>最后
> {
>writeLock.unlock();
> }
> }
()
client_1
与client_2
同时调用一个Lock.WRITE
方法,client_1
的调用将等待client_2
完成。您还可以配置超时值,以指定如果此等待时间过长,client_1
将返回错误ConcurrentHashMap
),则需要声明您使用的是bean管理的并发-@Concurrentymanagement(bean)
client_1
与client_2
同时调用一个Lock.WRITE
方法,client_1
的调用将等待client_2
完成。您还可以配置超时值,以指定如果此等待时间过长,client_1
将返回错误ConcurrentHashMap
),则需要声明您使用的是bean管理的并发-@Concurrentymanagement(bean)
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
>
> private final Lock readLock = readWriteLock.readLock();
>
> private final Lock writeLock = readWriteLock.writeLock();
>
> private final List<E> list = new ArrayList<>();
>
> public void set(E o)
> {
> writeLock.lock();
> try
> {
> list.add(o);
> System.out.println("Adding element by thread"+Thread.currentThread().getName());
> }
> finally
> {
> writeLock.unlock();
> }
> }