项目上的另外一个需求是:

在做统计的时候需要将当前表锁定不能更新当前表记录

直接上代码

package com.robert.RedisTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.concurrent.TimeUnit; public class JDBCCountLockTest { private static String jdbcUrl = "jdbc:mysql://localhost:3306/test";
private static String username = "test";
private static String password = "test"; public static void main(String[] args) { new Thread(new Runnable(){
public void run(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl,username,password);
connection.setAutoCommit(false);
Statement st = connection.createStatement();
st.executeQuery("select count(1) num from table_name where mobile_phone = '13651969037' and rule_id='39' for update");
TimeUnit.SECONDS.sleep(5);
connection.commit();
System.out.println("Thread 1 commit "+Calendar.getInstance().getTime());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start(); new Thread(new Runnable(){
public void run(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl,username,password);
connection.setAutoCommit(false);
Statement st = connection.createStatement();
TimeUnit.SECONDS.sleep(1);
st.executeQuery("select * from table_name where id=4139 for update");
System.out.println("Thread 2 executeQuery finish "+Calendar.getInstance().getTime());
String update_sql_1 = "update table_name set rule_id='40' where id = '4139'";
st.executeUpdate(update_sql_1);
System.out.println("Thread 2 executeUpdate finish "+Calendar.getInstance().getTime());
connection.commit();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}

在Thread 2中 先sleep 1s

保证了Thread 1先执行

然后在Thread 1执行结束之后,Thread 2才能执行更新操作。

执行结果如下:

Thread 1 commit Thu Sep 01 15:58:51 CST 2016
Thread 2 executeQuery finish Thu Sep 01 15:58:51 CST 2016
Thread 2 executeUpdate finish Thu Sep 01 15:58:51 CST 2016

最新文章

  1. cocos2dx && Lua 环境配置
  2. MySql避免重复插入记录
  3. 通过rinetd实现端口转发来访问内网的服务
  4. HashMap循环遍历方式及其性能对比(zhuan)
  5. php以excel的形式将数据输出
  6. NLog 传递参数
  7. eclipse 修改设置Ctrl+Shift+F长度
  8. PHP构造函数的用法分析
  9. android开发之Toast的多种应用
  10. SqlSugar框架T4模板的使用
  11. HDU 1599 find the mincost route (无向图floyd最小环详解)
  12. C#发送邮件类
  13. Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)
  14. 虚拟机console基础环境部署——系统基础环境
  15. 从零开始学习PYTHON3讲义(一)认识Python
  16. Java集合类源码解析:ArrayList
  17. Java异常处理——受控(checked)的异常(throws语句)
  18. Matplotlib学习---用wordcloud画词云(Word Cloud)
  19. [转]golang的goroutine调度机制
  20. linux系统中对SSD硬盘优化的方法

热门文章

  1. LinuxAsm#Chapter10
  2. stanford coursera 机器学习编程作业 exercise 5(正则化线性回归及偏差和方差)
  3. Android中实现如下多语言选择Radiobutton效果
  4. 在AppDelegate 或其它地方用UITabBarController怎么办
  5. 作业——FoodTracker程序
  6. Oracle死锁查询及处理
  7. css布局多列等高
  8. iOS多线程开发
  9. 临时表之IF-ELSE
  10. ios开发--多台电脑共用一个开发证书的方法