首页 新闻 搜索 专区 学院

将线程对象作为锁:synchronized (b),这是锁住什么呀

0
[待解决问题]
class ThreadA {
    public static void main(String[] args) {
        ThreadB b = new ThreadB();
        b.start();
        System.out.println("b is start....");
        synchronized (b)//括号里的b是什么意思,起什么作用,b作为对象锁,是锁住b线程的synchronized中代码还是主线程synchronized中代码? <1>
        {
            try {

                System.out.println("Waiting for b to complete...");
                b.wait();//这一句是什么意思,究竟让谁wait?
                System.out.println("Completed.Now back to main thread");
            } catch (InterruptedException e) {
            }
        }
        System.out.println("Total is :" + b.total);
    }
}


class ThreadB extends Thread {
    int total;

    public void run() {
       /* try {
        }catch(Exception ex){}*/
        synchronized (this)     //<2>
        {

            System.out.println("ThreadB is running..");
            for (int i = 0; i < 10; i++) {
                total += i;
                System.out.println("total is " + total);
            }
            notify();
        }
    }
}

将线程对象作为锁:synchronized (b),这是锁住什么呀,主线程要b线程对象锁有什么 用?

这段代码,为什么一直是 System.out.println("b is start...."); 执行后,接着就是b线程执行...不断尝试,不知道为什么没有wait阻塞现象?

xiaofang.bk的主页 xiaofang.bk | 初学一级 | 园豆:5
提问于:2020-09-25 21:58
< >
分享
所有回答(1)
0

...奇怪的描述,..我这里很明显的wait了。。

正常情况下,B和A都是去拿B的对象锁,B先执行的,等B执行完,才会到A,那A会一直wait,没有人去notify它了。。

//这是打印的输出,明显A那后面没输出了啊。。。
//话说这是想测试wait是不是会释放锁吗。。
ThreadB is running..
total is 0
total is 1
total is 3
total is 6
total is 10
total is 15
total is 21
total is 28
total is 36
total is 45
b is start....
Waiting for b to complete...
WMG-Eight | 园豆:628 (小虾三级) | 2020-09-27 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册