synchronized

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 关键字锁的只是程序代码,如果需要锁住数据库表,你需要开启数据库的事务。

  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    1. synchronized关键字在Java中的使用场景和作用是什么?

    synchronized关键字在Java中的使用场景是多线程编程,用来保证线程安全。它可以用来修饰方法或代码块,实现对对象的同步访问。作用是在多线程环境下,确保同一时间只有一个线程获得锁,执行同步代码块,其他线程则需要等待锁的释放。

    在修饰方法时,锁的是当前实例对象,即this指针;在修饰静态方法时,锁的是当前类对象,即Class对象;在修饰代码块时,需要指定加锁对象,对给定对象加锁。

    1. 如果一个线程正在使用synchronized锁定的代码块,是否会影响其他线程对数据库表的写入操作?

    不会。synchronized锁定的代码块只会影响其他线程对同步对象的访问,对于数据库表的写入操作并不会受到影响。如果其他线程需要访问同一个数据源,可以使用数据库连接池来管理连接,在同一时间只分配给一个线程使用。

    1. 在执行testSynchronized1方法时,如果另一个线程同时在尝试往A表写入数据,会不会因为被锁定而失败呢?我想了解synchronized对Java代码和数据库表的影响。

    不会。synchronized只会影响Java代码的执行,并不会对数据库表的写入操作产生影响。如果多个线程需要访问同一个数据库表,可以使用数据库连接池来管理连接,在保证线程安全的前提下实现对数据库表的访问。