zoukankan      html  css  js  c++  java
  • 理解wait notify的好例子

     1 import java.util.concurrent.TimeUnit;
     2 
     3 
     4 public class Example2 {
     5 
     6     /**
     7      * @param args
     8      */
     9     public static void main(String[] args) {
    10         // TODO Auto-generated method stub
    11         final Object synObj = new Object();        
    12         Thread t1 = new Thread(new Runnable() {
    13             @Override
    14             public void run() {
    15                 synchronized(synObj) {
    16                     System.out.println("1.T1获取synObj的对象监视器,开始执行同步块");
    17                     try {
    18                         TimeUnit.MINUTES.sleep(1);//休息一分钟,不放弃锁
    19                         System.out.println("T1在 wait()时挂起了");
    20                         synObj.wait();
    21                         System.out.println("T1被T2唤醒后并重新获得synObj的对象监视器,继续执行");                        
    22                     }catch(InterruptedException e) {
    23                         e.printStackTrace();
    24                     }
    25                     System.out.println("T1获取synObj的对象监视器,结束同步块");
    26                 }                
    27             };
    28         });
    29         t1.start();
    30 
    31 
    32         Thread t2 = new Thread(new Runnable() {
    33             @Override
    34             public void run() {
    35                 System.out.println("T2启动,但是因为T1占用了synObj的对象监视器,则等待T1执行synObj.wait来释放它");
    36                 synchronized(synObj) {
    37                     try {
    38                         System.out.println("在T1执行synObj.wait后,T2获取synObj的对象监视器,进入同步块");
    39                         synObj.notify();
    40                         System.out.println("T2执行synObj.notify(),T1被唤醒,但T2还在同步块中,没有释放synObj的对象监视器,T1等待synObj的对象监视器");
    41                         TimeUnit.MINUTES.sleep(1);
    42                         System.out.println("T2结束同步块,释放synObj的对象监视器,T1获取到synObj的对象监视器,并执行wait后面的操作");
    43                     }catch(InterruptedException e) {
    44                         e.printStackTrace();
    45                     }
    46                 }                
    47             };
    48         });
    49         t2.start();
    50         
    51 
    52     }
    53 
    54 }
  • 相关阅读:
    reduce()、filter()、map()、some()、every()、...展开属性
    react的this.setState详细介绍
    HDU
    The 2015 ACM-ICPC Asia Beijing Regional Contest
    Ubuntu 14.04 安装 WPScan
    蓝桥杯-历届试题-公式求值
    Ubuntu下快速搭建ACdream Online Judge v1.5.3
    Codeforces Round #290 (Div. 2)
    SOJ
    SOJ
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3859133.html
Copyright © 2011-2022 走看看