Uncle灬稲愺亾 2017-11-07 14:37 采纳率: 0%
浏览 929

线程锁定中,变量的锁定

代码如下所示:
package thread;

public class TT implements Runnable{

int b = 100;
/**
 * @param args
 */
public static void main(String[] args) throws Exception {
    TT tt = new TT();
    Thread t = new Thread(tt);
    t.start(); 
    Thread.sleep(1000);
    tt.m2();

}

public synchronized void m1() throws Exception{
    b = 100000;
    Thread.sleep(5000);
    System.out.println("b="+b);
}

public void m2(){ 
    System.out.println("b=      "+b);
    b=1;
}

@Override
public void run() {
    try {
        m1();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

输出:
b= 100000
b=1

能说明这个锁方法并没有锁住当前变量,导致被其他方法修改么?
如何修改类,使得该变量被锁定?

  • 写回答

1条回答 默认 最新

  • jssmartstar 2017-11-08 01:20
    关注

    A线程锁住某变量,再修改该变量,然后释放。
    B线程在访问该变量之前,先看下这个变量有没有被锁住,锁住的话就等待,直接别人解锁,然后B线程锁住该变量,再修改该变量,然后释放。

    这就是正确的操作方法,如果谁不遵守这个规则,那神仙也没有办法,哈哈哈

    评论

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法