先说什么是线程同步,其实线程同步是说让预定的先后顺序去执行。当用户进行一个调用时,在没有得到结果之前,其它线程不能调用这个方法。
在工作中遇到这样一个问题,有一张表,它的作用就是为其他表提供主键数据,如果多个用户同时访问这张表,那就存在共享资源的问题,简单说就是容易产生脏数据,那这里就涉及到线程同步的问题。
利用synchronized是一种解决方案。分两类锁。
1.对类加锁
将synchronized加到静态方法上,对类加锁。因为静态方法属于类。
public static synchronized int generate(String tableName){
//方法体...
}
2.对对象加锁
在范围关键字后面去加入关键字synchronized;对某一块代码使用synchronized(this),这个方法只能一次只有一个线程进行调用,当方法执行完毕以后,其他线程才能进入。,例如synchronized(this)可以放到访问数据的执行语句块,保证了每次只有一个线程访问。
public synchronized int generate(String tableName){
//方法体...
}
public int generate(String tableName){
//方法体....
synchronized(this) {
pstmt.executeQuery(); //执行语句
}
}
线程同步在多用户操作系统是不得不考虑的一个问题,也是一个特别重要的问题。这是在代码中直接利用java关键字去实现线程同步,下一篇要介绍利用sql语句中悲观锁实现线程同步。