concurrentreadwritetest.java
来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 103 行
JAVA
103 行
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.jackrabbit.core;import javax.jcr.Node;import javax.jcr.RepositoryException;import javax.jcr.Session;import javax.jcr.PropertyIterator;import javax.jcr.Property;import java.util.List;import java.util.ArrayList;import java.util.Random;/** * <code>ConcurrentReadWriteTest</code> performs a test with a number of * concurrent readers and one writer. */public class ConcurrentReadWriteTest extends AbstractConcurrencyTest { private static final int NUM_NODES = 5; private static final int NUM_THREADS = 5; private static final int RUN_NUM_SECONDS = 20; public void testReadWrite() throws RepositoryException { final List uuids = new ArrayList(); for (int i = 0; i < NUM_NODES; i++) { Node n = testRootNode.addNode("node" + i); n.addMixin(mixReferenceable); uuids.add(n.getUUID()); } final long[] numReads = new long[]{0}; testRootNode.save(); Thread t = new Thread(new Runnable() { public void run() { try { runTask(new Task() { public void execute(Session session, Node test) throws RepositoryException { Random rand = new Random(); long start = System.currentTimeMillis(); long reads = 0; while (System.currentTimeMillis() < start + RUN_NUM_SECONDS * 1000) { String uuid = (String) uuids.get(rand.nextInt(uuids.size())); Node n = session.getNodeByUUID(uuid); try { for (PropertyIterator it = n.getProperties(); it.hasNext(); ) { Property p = it.nextProperty(); if (p.getDefinition().isMultiple()) { p.getValues(); } else { p.getValue(); } } } catch (RepositoryException e) { System.out.println(e); } reads++; } synchronized (numReads) { numReads[0] += reads; } } }, NUM_THREADS, testRoot); } catch (RepositoryException e) { e.printStackTrace(); } } }); t.start(); long numWrites = 0; while (t.isAlive()) { Random rand = new Random(); String uuid = (String) uuids.get(rand.nextInt(uuids.size())); Node n = superuser.getNodeByUUID(uuid); if (n.hasProperty("test")) { n.getProperty("test").remove(); } else { n.setProperty("test", "hello world"); } n.save(); numWrites++; } System.out.println("#writes performed: " + numWrites); System.out.println("#reads performed: " + numReads[0]); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?