1 5 package org.h2.test.db; 6 7 import java.sql.Connection ; 8 import java.sql.PreparedStatement ; 9 import java.sql.ResultSet ; 10 import java.sql.Statement ; 11 import java.util.Random ; 12 13 import org.h2.test.TestAll; 14 import org.h2.test.TestBase; 15 16 public class TestMultiThread extends TestBase implements Runnable { 17 18 private boolean stop; 19 private TestMultiThread parent; 20 private Random random; 21 private Connection conn; 22 private Statement stat; 23 24 public TestMultiThread() { 25 } 26 27 private TestMultiThread(TestAll config, TestMultiThread parent) throws Exception { 28 this.config = config; 29 this.parent = parent; 30 random = new Random (); 31 conn = getConnection(); 32 stat = conn.createStatement(); 33 } 34 35 public void test() throws Exception { 36 37 Connection conn = getConnection(); 38 Statement stat = conn.createStatement(); 39 stat.execute("CREATE TABLE TEST(ID IDENTITY, NAME VARCHAR)"); 40 int len = getSize(10, 200); 41 Thread [] threads = new Thread [len]; 42 for(int i=0; i<len; i++) { 43 threads[i] = new Thread (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 rs = stat.executeQuery("SELECT COUNT(*) FROM TEST"); 55 rs.next(); 56 trace("max id="+rs.getInt(1)); 57 conn.close(); 58 } 59 60 Connection getConnection() throws Exception { 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 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 rs = prep.executeQuery(); 75 while(rs.next()) { 76 rs.getString("NAME"); 77 } 78 } 79 conn.close(); 80 } catch(Exception e) { 81 logError("multi", e); 82 } 83 } 84 85 } 86 | Popular Tags |