soldier_jw 2019-04-07 22:31 采纳率: 0%
浏览 706

java多线程实例锁问题

1.我在一个方法里面加了两个锁,锁对象分别 是两个实例,
有一个实例会将本实例的线程挂起,
按理说另就只会执行另外一个同步代码块里的内容,
真实情况是两个都已经挂起了,

我的理解是只有锁对象是类class才会两个都挂起,



class Customer implements Runnable{
    Product p;
    Product p1;
    public Customer(Product p,Product p1){
        this.p = p;
        this.p1= p1;
    }
    public Customer(Product p){
        this.p = p; 
    }
    @Override
    public void run() {
        while(true){
            System.out.println("我是消费者被执行了");
            synchronized (p1) {
                System.out.println(p1);
                System.out.println("hellll");
                try {
                    Thread.sleep(222);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            synchronized (p) {
                if(p.flag){
                    System.out.println("消费了"+p.name+"价格:"+p.price);
//                  p.flag=false; 
                    p.notify();
                }else {
                    try {
                        Thread.sleep(1333);
                        p.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            } 


        }

    }

}


        Thread cus1 = new Thread(customer1);
        cus1.start();
  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2019-04-08 09:46
    关注

    首先,你这个测试类中只有两个线程一个main线程,Thread cus1 = new Thread(customer1);本质上并没有对于锁p1,p的竞争问题。
    如果要测试竞争,需要多定义几个执行ustomer 任务的线程。
    其次,sleep操作是现场休眠,并不是由于等待锁而挂起了。

    评论

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果