wait时间到或被中断唤醒时,仍然需要等待获取锁。_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > wait时间到或被中断唤醒时,仍然需要等待获取锁。

wait时间到或被中断唤醒时,仍然需要等待获取锁。

 2012/3/1 9:34:56  atell  程序员俱乐部  我要评论(0)
  • 摘要:importjava.io.IOException;publicclassDemo{/***@paramargs*@throwsIOException*@throwsInterruptedException*@throwsClassNotFoundException*/publicstaticvoidmain(String[]args)throwsIOException,InterruptedException,ClassNotFoundException{T1t1=newT1()
  • 标签:
import java.io.IOException;

public class Demo {

    /**
     * @param args
     * @throws IOException
     * @throws InterruptedException
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        
        T1 t1 = new T1();
        T2 t2 = new T2(t1);
        t1.start();
        t2.start();
        
    }


    static Integer i = 0;

    static class T1 extends Thread {

        public void run() {

            synchronized (i) {
                System.out.println("T1-在syn里");
                try {
                    i.wait(50L);//验证表明:wait时间到或被中断唤醒,不一定会继续执行或者跳到catch里,而是还需要等待获得锁。
                                //如果wait时间到或被中断唤醒,而T2还在syn里,那么T1还是会等待。
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("结束wait-T1");
                System.out.println("T1-在syn里");
                try {
                    Thread.sleep(10000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("T1-在syn里");
            }
            System.out.println("离开syn-T1");

        }
    }
    

    static class T2 extends Thread {

        Thread t1;
        public T2(Thread t1){
            this.t1 = t1;
        }
        
        public void run() {
            synchronized (i) {
                System.out.println("T2-在syn里");
                try {
                    t1.interrupt();
                    Thread.sleep(10000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("T2-还在syn里");
            }
            System.out.println("T2-离开syn");

        }
    }
}
?
/验证表明:wait时间到或被中断唤醒,不一定会继续执行或者跳到catch里,而是还需要等待获得锁。
                                //如果wait时间到或被中断唤醒,而T2还在syn里,那么T1还是会等待。
  • 相关文章
发表评论
用户名: 匿名