JAVA多线程同步加锁的为什么没有加上 晾出代码

class Task1 implements Runnable {
@Override
public void run() {
synchronized (db) {

            ContentValues cv1 = new ContentValues();
            cv1.put("name", "李");
            cv1.put("age", 17);
            db.insert("person", null, cv1);
        }
    }
      }
class Task2 implements Runnable {

    @Override
    public void run() {
        synchronized (db){
            ContentValues cv1 = new ContentValues();
            cv1.put("name", "张");
            cv1.put("age", 18);

            ContentValues cv2 = new ContentValues();
            cv2.put("name", "孙");
            cv2.put("age", 25);
            for (int i = 0; i < 10; i++) {
                db.insert("person", null, cv1);
                db.insert("person", null, cv2);
            }}
    }
}
class Task3 implements Runnable {

    @Override
    public void run() {

ContentValues cv1 = new ContentValues();
cv1.put("name", "王");
cv1.put("age", 22);
ContentValues cv2 = new ContentValues();
cv2.put("name", "赵");
cv2.put("age", 80);
ContentValues cv3 = new ContentValues();
cv3.put("name", "jesse");
cv3.put("age", 99);
for (int i = 0; i < 10; i++) {
    db.insert("person", null, cv1);
    db.insert("person", null, cv2);
    db.insert("person", null, cv3);
         }

    }

定义一个静态的 static SQLiteDatabase db; 然后我这样加锁问什么不行呢?求指点

没必要过度枷锁,锁住对db的访问就可以了。

今天没工具运行。下次有机会考下代码来看看、

如果db访问的是同一个互斥锁的话,是可以同步的,我不知道你的运行代码怎么写的。
但是锁在同一个运行线程中是非互斥的,只有两个或以上的线程才会出现锁的竞争。
线程的调用时随机的,所以你同时运行三根线程的话,线程的执行顺序是没有保障的。

如果要互斥,可以使用串行效果的线程池,顺序执行线程。
其他情况,线程是同时运行,交叉执行的。

// 1.线程串行..
ExecutorService pool = Executors.newSingleThreadExecutor();
Thread thread1 = new MyThread();
Thread thread2 = new MyThread();
Thread thread3 = new MyThread();
pool.execute(thread1);
pool.execute(thread2);
pool.execute(thread3);

    pool.shutdown();