KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > test > db > TestMultiThread


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

5 package org.h2.test.db;
6
7 import java.sql.Connection JavaDoc;
8 import java.sql.PreparedStatement JavaDoc;
9 import java.sql.ResultSet JavaDoc;
10 import java.sql.Statement JavaDoc;
11 import java.util.Random JavaDoc;
12
13 import org.h2.test.TestAll;
14 import org.h2.test.TestBase;
15
16 public class TestMultiThread extends TestBase implements Runnable JavaDoc {
17
18     private boolean stop;
19     private TestMultiThread parent;
20     private Random JavaDoc random;
21     private Connection JavaDoc conn;
22     private Statement JavaDoc stat;
23
24     public TestMultiThread() {
25     }
26
27     private TestMultiThread(TestAll config, TestMultiThread parent) throws Exception JavaDoc {
28         this.config = config;
29         this.parent = parent;
30         random = new Random JavaDoc();
31         conn = getConnection();
32         stat = conn.createStatement();
33     }
34     
35     public void test() throws Exception JavaDoc {
36         
37         Connection JavaDoc conn = getConnection();
38         Statement JavaDoc stat = conn.createStatement();
39         stat.execute("CREATE TABLE TEST(ID IDENTITY, NAME VARCHAR)");
40         int len = getSize(10, 200);
41         Thread JavaDoc[] threads = new Thread JavaDoc[len];
42         for(int i=0; i<len; i++) {
43             threads[i] = new Thread JavaDoc(new TestMultiThread(config, this));
44         }
45         for(int i=0; i<len; i++) {
46             threads[i].start();
47         }
48         int sleep = getSize(400, 10000);
49         Thread.sleep(sleep);
50         this.stop = true;
51         for(int i=0; i<len; i++) {
52             threads[i].join();
53         }
54         ResultSet JavaDoc rs = stat.executeQuery("SELECT COUNT(*) FROM TEST");
55         rs.next();
56         trace("max id="+rs.getInt(1));
57         conn.close();
58     }
59
60     Connection JavaDoc getConnection() throws Exception JavaDoc {
61         return getConnection("jdbc:h2:mem:multiThread");
62     }
63     
64     public void run() {
65         try {
66             while(!parent.stop) {
67                 stat.execute("SELECT COUNT(*) FROM TEST");
68                 stat.execute("INSERT INTO TEST VALUES(NULL, 'Hi')");
69                 PreparedStatement JavaDoc prep = conn.prepareStatement("UPDATE TEST SET NAME='Hello' WHERE ID=?");
70                 prep.setInt(1, random.nextInt(10000));
71                 prep.execute();
72                 prep = conn.prepareStatement("SELECT * FROM TEST WHERE ID=?");
73                 prep.setInt(1, random.nextInt(10000));
74                 ResultSet JavaDoc rs = prep.executeQuery();
75                 while(rs.next()) {
76                     rs.getString("NAME");
77                 }
78             }
79             conn.close();
80         } catch(Exception JavaDoc e) {
81             logError("multi", e);
82         }
83     }
84
85 }
86
Popular Tags