synchronized是锁住Java里面的代码,还是会锁住数据库的表
public synchronized void testSyncheonized1(){
//需要操作的同步资源
System.out.println("当前方法往mysql中的A表插入一千条数据,耗时六十秒");
}
public void testSyncheonized2(){
int a = 1;
synchronized (this){
System.out.println("当前方法往mysql的A表插入一条数据,耗时五秒");
}
如果testSyncheonized1先执行五秒,然后testSyncheonized2在不同的线程中执行,那么往testSyncheonized2往A表写数据能否正常成功呢,testSyncheonized1开始执行的过程中会锁住整个A表吗?
不会,synchronized跟数据表没有关系,其次synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,testSyncheonized1和testSyncheonized2是两个不同的方法,互相不影响
synchronized 关键字锁的只是程序代码,如果需要锁住数据库表,你需要开启数据库的事务。
回答:
synchronized关键字在Java中的使用场景是多线程编程,用来保证线程安全。它可以用来修饰方法或代码块,实现对对象的同步访问。作用是在多线程环境下,确保同一时间只有一个线程获得锁,执行同步代码块,其他线程则需要等待锁的释放。
在修饰方法时,锁的是当前实例对象,即this指针;在修饰静态方法时,锁的是当前类对象,即Class对象;在修饰代码块时,需要指定加锁对象,对给定对象加锁。
不会。synchronized锁定的代码块只会影响其他线程对同步对象的访问,对于数据库表的写入操作并不会受到影响。如果其他线程需要访问同一个数据源,可以使用数据库连接池来管理连接,在同一时间只分配给一个线程使用。
不会。synchronized只会影响Java代码的执行,并不会对数据库表的写入操作产生影响。如果多个线程需要访问同一个数据库表,可以使用数据库连接池来管理连接,在保证线程安全的前提下实现对数据库表的访问。