1
回答
java 的 wait 和 notify 的用法
终于搞明白,存储TCO原来是这样算的>>>   

public class MyThreadPrinter2 implements Runnable {   
    private String name;  
    private Object prev;  
    private Object self;  
 
    private MyThreadPrinter2(String name, Object prev, Object self) {  
        this.name = name;  
        this.prev = prev;  
        this.self = self;  
    }  
 
    @Override 
    public void run() {  
        int count = 10;  
        while (count > 0) {  
            synchronized (prev) {  
                synchronized (self) {  
                    System.out.print(name);  
                    count--; 
                   
                    self.notify();  
                }  
                try {  
                    prev.wait();  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
 
        }  
    }  
 
    public static void main(String[] args) throws Exception {  
        Object a = new Object();  
        Object b = new Object();  
        Object c = new Object();  
        MyThreadPrinter2 pa = new MyThreadPrinter2("A", c, a);  
        MyThreadPrinter2 pb = new MyThreadPrinter2("B", a, b);  
        MyThreadPrinter2 pc = new MyThreadPrinter2("C", b, c);  
          
          
        new Thread(pa).start();

Thread.sleep(10);
        new Thread(pb).start();

Thread.sleep(10);
        new Thread(pc).start();

Thread.sleep(10);    }  

程序运行的主要过程就是A线程最先运行,持有C,A对象锁,后释放A,C锁,唤醒B。线程B等待A锁,再申请B锁,后打印B,再释放B,A锁,唤醒C,线程C等待B锁,再申请C锁,后打印C,再释放C,B锁,唤醒A程序运行的主要过程就是A线程最先运行,持有C,A对象锁,后释放A,C锁,唤醒B。线程B等待A锁,再申请B锁,后打印B,再释放B,A锁,唤醒C,线程C等待B锁,再申请C锁,后打印C,再释放C,B锁,唤醒A程序运行的主要过程就是A线程最先运行,持有C,A对象锁,后释放A,C锁,唤醒B。线程B等待A锁,再申请B锁,后打印B,再释放B,A锁,唤醒C,线程C等待B锁,再申请C锁,后打印C,再释放C,B锁,唤醒A程序运行的主要过程就是A线程最先运行,持有C,A对象锁,后释放A,C锁,唤醒B。线程B等待A锁,再申请B锁,后打印B,再释放B,A锁,唤醒C,线程C等待B锁,再申请C锁,后打印C,再释放C,B锁,唤醒A程序运行的主要过程就是A线程最先运行,持有C,A对象锁,后释放A,C锁,唤醒B。线程B等待A锁,再申请B锁,后打印B,再释放B,A锁,唤醒C,线程C等待B锁,再申请C锁,后打印C,再释放C,B锁,唤醒A。程序运行的主要过程就是A线程最先运行,持有C,A对象锁,后释放A,C锁,唤醒B。线程B等待A锁,再申请B锁,后打印B,再释放B,A锁,唤醒C,线程C等待B锁,再申请C锁,后打印C,再释放C,B锁,唤醒AA线程最先运行,持有C,A对象锁,后释放A,C锁线程A先运行,持有C,A锁,后释放A,C锁,唤醒B?   我就想问一下  ,持有C,A锁什么意思?什么时候释放的?求详细解答,我是一菜鸟

举报
qjm201000
发帖于4年前 1回/285阅
顶部