/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.test.synth.thread; import java.sql.SQLException; import java.util.Random; import org.h2.test.TestBase; /** * The is an abstract operation for {@link TestMulti}. */ abstract class TestMultiThread extends Thread { /** * The base object. */ TestMulti base; /** * The random number generator. */ Random random = new Random(); TestMultiThread(TestMulti base) { this.base = base; } /** * Execute statements that need to be executed before starting the thread. * This includes CREATE TABLE statements. */ abstract void first() throws SQLException; /** * The main operation to perform. This method is called in a loop. */ abstract void operation() throws SQLException; /** * Execute statements before entering the loop, but after starting the * thread. */ abstract void begin() throws SQLException; /** * This method is called once after the test is stopped. */ abstract void end() throws SQLException; /** * This method is called once after all threads have been stopped. */ abstract void finalTest() throws SQLException; public void run() { try { begin(); while (!base.stop) { operation(); } end(); } catch (Throwable e) { TestBase.logError("error", e); } } }