[前][次][番号順一覧][スレッド一覧]

mysql:13102

From: Tetsuro IKEDA <Tetsuro IKEDA <te.ikeda@xxxxxxxxxx>>
Date: Mon, 19 Jun 2006 09:46:49 +0900
Subject: [mysql 13102] Re: 排他制御????

池田です。

> これって、排他制御というのですか。???

概ね合っていると思います。

以下のコードではINSERT文同士をぶつけようとしていますよね。

従ってInnoDBの場合なら、接続を確立した後に分離レベルを
SERIALIZABLEに変更するとかどうでしょう。

con = DriverManager.getConnection(url,user,pass);
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

あるいはMyISAMの場合などですが、テーブルロックを使うとか。

stat.executeUpdate("LOCK TABLES ff WRITE");
for(int i =0;i<100;i++){
   ・・・処理・・・
}
stat.executeUpdate("UNLOCK TABLES");

いろいろ動かしながらイメージをつかんでいただければ・・・。

TOMTOM wrote:
> こんにちは、
> 教えて欲しいことがあるのですが、
> 例えば、二台のパソコンから、mysqlにデータを
> 追加している時、一方のパソコンが、追加している時は、
> 他方は、待機して、追加が終わったとき、
> 待機していた方が、追加更新を始めるようにしたいのです。
> これって、排他制御というのですか。???
> 
> パソコンが一台しか、無いので、
> javaで、スレット処理を利用して、あたかも、二台から、アクセス
> しているようなコードにして、実行したのですが、
> 二つのスレットが交互にアクセスしているみたいで、
> どうの様にしたら、期待した、
> アクセスになるか、以下のプログラムを
> どのように、改造したらいいのか、教えてください。
> 
> 
> 環境 win xp
>       jdk 1.5
>       mysql 5.0
>       connector 3.1.11
> 
> *******************************************
> package threadsql;
> 
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.SQLException;
> import java.sql.Statement;
> 
> /**
>  *
>  * @author 
>  */
> class tsql extends Thread {
>     Connection con=null;
>     Statement stat = null;
>     String data=null;
>     
>     public tsql(String url,String user,String pass,String data) {
>         try {
>             Class.forName("com.mysql.jdbc.Driver");
>             con = DriverManager.getConnection(url,user,pass);
>             stat = con.createStatement();
>             con.setAutoCommit(false);
>         } catch (ClassNotFoundException ex) {
>             ex.printStackTrace();
>         } catch (SQLException ex) {
>             ex.printStackTrace();
>         }
>         this.data=data;
>         
>     }
> 
>     public void run() {
>         String sql = "insert into ff values('"+data+"')";
>         for(int i =0;i<100;i++){
>             try {
>                 
>                 int k = stat.executeUpdate(sql);
>                 System.out.println(data+"  "+ i);
>                 Thread.sleep(100);
>             } catch (InterruptedException ex) {
>                 ex.printStackTrace();
>             } catch (SQLException ex) {
>                 ex.printStackTrace();
>             }
>         }
>         try {
>             con.commit();
>             stat.close();
>             con.close();
>         } catch (SQLException ex) {
>             ex.printStackTrace();
>         }
>         
>     }
>     
> }
> public class threadsql {
>     
>     /** Creates a new instance of threadsql */
>     public threadsql() {
>         String url="jdbc:mysql://localhost/test";
>         String user = "root";
>         String pass = "*********";
>         String data ="user1";
>         tsql t1 = new tsql(url,user,pass,data);
> 
>         String url1="jdbc:mysql://prim/test";
>         String user1 = "user2";
>         String pass1 = "*********";
>         String data1 ="user2";
>         tsql t2 = new tsql(url1,user1,pass1,data1);
>         
>         
>         t1.start();
>         t2.start();
> 
>     }
>     
>     /**
>      * @param args the command line arguments
>      */
>     public static void main(String[] args) {
>         new threadsql();
>         // TODO code application logic here
>     }
>     
> }
> 
> *****************************************************
> 実行結果、
> 
> user1  0
> user2  0
> user1  1
> user2  1
> user1  2
> user2  2
> user1  3
> user2  3
> --------
> 
> これを、以下の様な、実行結果にしたいのです。
> 
> user1  0
> user1  1
> user1  2
> user1  3
> --------
> --------
> user2  0
> user2  1
> user2  2
> user2  3
> --------
> --------
> 
> よろしくお願いいたします。
> 
> 
> 
> 
> 
> 
> 


-- 
Tetsuro IKEDA
Sumisho Computer Systems Corp.
Open Source System Div.
te.ikeda@xxxxxxxxxx
TEL +81-3-5166-2420
FAX +81-3-5166-1189

[前][次][番号順一覧][スレッド一覧]

     13101 2006-06-19 09:27 [TOMTOM <tomf1@xxxxxx] 排他制御????                        
->   13102 2006-06-19 09:46 ┗[Tetsuro IKEDA <te.ik]                                       
     13103 2006-06-19 14:21  ┗[TOMTOM <tomf1@xxxxxx] Re: : 排他制御????