(47)21.4.3 中断2---Java编程思想之并发笔记

被互斥所阻塞
1. 在一个对象上调用synchronized方法,而这个对象在锁已经被其它对象获得,那么调用任务就被挂起,直到这个锁可以获得。
2. 例子:
package  jiangning.c21;

public  class  MultiLock {
        public  synchronized  void  f1( int  count){
              if (count-- > 0){
                  System.  out .println( "f1() call f2() with count"  +count);
                  f2(count);
            }
      }
        public  synchronized  void  f2( int  count){
              if (count-- > 0){
                  System.  out .println( "f2() call f1() with count"  +count);
                  f1(count);
            }
      }
        public  static  void  main(String[] args) {
              final  MultiLock multiLock =  new  MultiLock();
              new  Thread(){
                    public  void  run(){
                        multiLock.f1(10);
                  }
            }.start();
      }

}


/**
f2()  call  f1()  with  count8
f1()  call  f2()  with  count7
f2()  call  f1()  with  count6
f1()  call  f2()  with  count5
f2()  call  f1()  with  count4
f1()  call  f2()  with  count3
f2()  call  f1()  with  count2
f1()  call  f2()  with  count1
f2()  call  f1()  with  count0
*/

3.ReenTRantLock
  这个类是在Java SE5增加的新特性。
4.例子2.
package  jiangning.c21;

import  java.util.concurrent.TimeUnit;
import  java.util.concurrent.locks.Lock;
import  java.util.concurrent.locks.ReentrantLock;

class  BlockedMutex{
        private  Lock  lock  =  new  ReentrantLock();
        public  BlockedMutex(){
              lock .lock(); //在初始化的时候锁定了对象,没有进行释放
      }
        public  void  f(){
              try  {
                    lock .lockInterruptibly();
                  System.  out .println( "lock acquired in f()"  );
            }  catch  (InterruptedException e) {
                  e.printStackTrace();
                  System.  out .println( " Interrupted from lock acquisition in f()" );
            }
      }
}
class  Blocked2  implements  Runnable{
      BlockedMutex  blocked  =  new  BlockedMutex();
      
        public  void  run() {
            System.  out .println( "Waiting for f() in BlockedMutex"  );      
              blocked .f(); //被阻塞,在这里想调用f方法,但是没有释放对象,从而抛出异常。
            System.  out .println( "Broken out of blocked call"  );
      }
      
}
public  class  Interrupting2 {

        public  static  void  main(String[] args)  throws  Exception{
            Thread t =  new  Thread( new  Blocked2());
            t.start();
            TimeUnit.  SECONDS .sleep(1);
            System.  out .println( "Issuing t.interrupt()"  );
            t.interrupt();  //打断被互斥所阻塞的调用。
      }
}

/**
Waiting  for  f()  in  BlockedMutex
Issuing  t.interrupt()
java.lang.InterruptedException  Interrupted  from  lock  acquisition  in  f()
Broken  out  of  blocked  call

        at  java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireInterruptibly(AbstractQueuedSynchronizer.java:877)
        at  java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1201)
        at  java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:312)
        at  jiangning.c21.BlockedMutex.f(Interrupting2.java:14)
        at  jiangning.c21.Blocked2.run(Interrupting2.java:27)
        at  java.lang .Thread.run(Thread.java:619)
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sqldeveloper-21.4.3.063.0100-no-jre.zip是Oracle SQL Developer的一个压缩文件。该文件是没有内置Java运行环境(JRE)的版本,需要用户自行安装Java并配置环境变量后才能正常使用。 Oracle SQL Developer是Oracle公司推出的一款免费的数据库集成开发环境(IDE),为开发人员提供强大的工具来管理和开发Oracle数据库。它具有丰富的功能,包括SQL编辑器、数据模型设计器、数据报表生成器等,可用于编写和调试SQL语句、执行数据库操作等工作。 用户下载了sqldeveloper-21.4.3.063.0100-no-jre.zip后,首先需要确保已经安装了Java运行环境(JRE)。如果没有安装,用户可以从Oracle官网或其他可信来源下载并安装适合自己操作系统的Java版本。 安装完Java后,还需要配置环境变量,将Java的安装路径添加到系统的PATH变量中,这样操作系统才能找到Java相关的执行文件。 完成以上步骤后,用户可以解压sqldeveloper-21.4.3.063.0100-no-jre.zip文件到指定目录。然后,执行解压后的文件夹中的sqldeveloper.exe可执行文件,启动Oracle SQL Developer。 初次启动时,可能需要用户设置一些连接信息,如数据库连接地址、用户名、密码等。用户可以根据需要配置不同的连接,以便于管理和开发多个数据库。 总之,sqldeveloper-21.4.3.063.0100-no-jre.zip是Oracle SQL Developer的一个版本,用户需要自行安装Java并配置环境变量后,才能正常使用该工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值