java 在方法中新建線程,傳參和加鎖詳解


在實際開發中,往往在基本兩三種創建線程的方法之外,還用到一個簡單的創建線程調用方法的情況,代碼如下:

public void deleteRedisData(RedisKey redisKey){
        new Thread(new Runnable() {
            @Override
            public void run() {
                deleteRedisByRedisKey(redisKey);
            }
        }).start();
    }

    protected synchronized void deleteRedisByRedisKey(RedisKey redisKey) {
        String key = null;
        RedisKey[] keys = RedisKey.values();
        for (RedisKey key2 : keys) {
            if(redisKey.equals(key2)){
                key = key2.toString();
            }
        }
        List<User> userList = userDao.getAll();
        try {
            Jedis jedis = new Jedis();
            System.out.println("delete one");
            for (User user : userList) {
                String userId = user.getId();
                String lastKey = key.concat(userId);
                jedis.del(lastKey.getBytes());
            }
        } catch (Exception e) {
            System.out.println("緩存未連接!");
        }
    }

通過new Thread方法創建一個新的線程,在線程里調用deleteRedisByRedisKey方法,有時候在執行這個方法匯報異常,我的是空指針異常,是因為這個方法里用到的一些方法有可能會出現數據不同步的現象,這個時候會拋出異常,給這個方法加上synchronize關鍵字,給這個方法加上鎖,會保證數據同步。

注意:

1、創建線程不需要繼承Thread類或實現Runnable接口;

2、數據同步指的是在這個線程中獲取數據或者修改數據有可能在別的線程中也在操作該數據,加鎖之后別的線程會等待該線程執行結束,保證數據同步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM