zoukankan      html  css  js  c++  java
  • 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、数据同步指的是在这个线程中获取数据或者修改数据有可能在别的线程中也在操作该数据,加锁之后别的线程会等待该线程执行结束,保证数据同步。

  • 相关阅读:
    第三百六十九天 how can I 坚持
    第三百六十八天 how can I 坚持
    第三百六十四、五、六、七天 how can I 坚持
    POJ 1663:Number Steps
    POJ 2676:Sudoku 数独
    POJ 2488:A Knight's Journey 深搜入门之走马观花
    POJ 3050:Hopscotch
    51nod 1419:最小公倍数挑战
    POJ 1011:Sticks 经典搜索
    POJ 2362:Square 觉得这才算深度搜索
  • 原文地址:https://www.cnblogs.com/huskyking/p/6145666.html
Copyright © 2011-2022 走看看