zoukankan      html  css  js  c++  java
  • 线程中锁方法和静态变量的锁

    1-----锁方法的使用:

     final ServletContext ctx = request.getServletContext();这个地方变量要定义成常量;

    new Thread(){//写成了内部类
    public void run() {
    AddCount.add(ctx);
    };
    }.start();

    class AddCount{
    //用类模板当锁
    public synchronized static void add(ServletContext ctx){------- synchronized 这里是锁住了方法----锁是方法的类
    Integer count = (Integer) ctx.getAttribute("count");
    count++;
    ctx.setAttribute("count", count);
    }
    }

    2-----用静态变量当锁

    ServletContext ctx=request.getServletContext();这里可以不用定义成常量
    new MyThread(ctx).start();

    --写到外部

    class MyThread extends Thread{

    private static String C = "asd";//这里定义一个静态的变量,使得共用了同一把锁
    private ServletContext ctx=null;
    public MyThread(ServletContext ctx) {
    this.ctx=ctx;
    }
    @Override
    public void run() {
    System.out.println("线程在跑跑跑......");

    synchronized (C) {这里是采用静态变量来进行加锁
    Integer count = (Integer) ctx.getAttribute("count");
    count++;
    ctx.setAttribute("count", count);

    }
    }
    }

  • 相关阅读:
    在Visual Studio 2019中配置OpenCV环境
    Java中的垃圾回收
    线程池
    Java中锁优化
    二叉树的几种遍历
    java中Comparator的用法(排序、分组)
    java8 stream
    Java后台生成二维码并上传到阿里云OSS
    代码生成器的成长过程
    软件的军工六性
  • 原文地址:https://www.cnblogs.com/1314wamm/p/6128214.html
Copyright © 2011-2022 走看看