日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

脏读

發布時間:2024/8/26 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 脏读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

臟讀就是指當一個事務正在訪問數據,并且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然后使用了這個數據。因為這個數據是還沒有提交的數據,那么另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。

public class Dirtyread {
    private String userName="pdz";
    private String password="12345";
    public synchronized void updateUser(String userName, String password) {
        this.userName = userName;
        try {
            Thread.currentThread().sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.password = password;
        System.out.println("更新用戶信息姓名為:" + userName + "密碼為:" + password);
    }


    public void queryUser() {
        System.out.println("獲取用戶信息姓名:" + userName + "密碼:" + password);
    }



    public static void main(String[] args) {
        final  Dirtyread dirtyread = new Dirtyread();

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                dirtyread.updateUser("張三", "111111");
            }
        });
        t1.start();
        try {
            Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        dirtyread.queryUser();
    }
}

  上述代碼中我們有一個線程t1和主線程main。為了放置更新用戶數據出現沖突,所以我們把updateUser方法進行了同步。當程序運行后,結果:

獲取用戶信息姓名:張三密碼:12345 更新用戶信息姓名為:張三密碼為:111111

我們獲取的信息并不是完全修改后的信息。而是密碼還是原來的密碼,而姓名卻是修改后的密碼。這就是臟讀。因為對象的屬性帳號和密碼在更新方法和獲取方法之中,我們都是資源共享。也就是說多個線程在執行不同的方法的時候,都是共享這兩個屬性的值。所以必須要對這兩個方法都進行同步。解決方法就是queryUser方法也進行synchronizedx修飾。

總結

以上是生活随笔為你收集整理的脏读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。