AdaultBird--我的黑马程序员之路!Chapter2---异常体系,多线程,同步代码块和同步函数,死锁

来源:互联网 发布:mac安装win10格式化 编辑:程序博客网 时间:2024/06/06 10:41

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

以下内容为之前学习过程中的学习日志,仅在此保留,用作提交入学日志!

  2015年8月21日。今天学习到java的异常体系。java中将所有的异常包含到一个Throwable类当中,该类根据程序错误的严重性又有两个直接子类,分别是Exception类和Error类,这两个类下面又饱含了各种常见的程序异常的类,可以通过API查找这些类。另外java还可以自定义程序异常,可以让自定义的类继承父类Exception或者Error。然后在构造函数中调用父类构造函数,加上子类特有属性,创建子类对象,并实现子类对象的初始化。此时,自定义异常需要区分是否是运行时异常(RuntimeException)的子类,还是编译时检测的异常。如果是前者,则不需要在有异常函数上抛出异常,或者抛出异常时,不需要子类对其进行处理。 
  2015年8月22日,今天学习了多线程。计算机任务管理器当中显示着正在运行的程序,一个.exe文件代表一个进程。每一个应用程序在访问CPU时,如果只按照一个主线来运行程序,则为单线程,否则即为多线程。可以理解为是按照多个线条来运行程序。多线程分为两种模式:第一种、通过创建多个Thread子类,然后复写其run方法,然后每一个子类再调用thread类的start方法,启动多线程运行;第二种、将需要多线程运行的代码实现Runnable接口,并复写其run方法,然后创建一个该子类的对象,并将其作为参数,传递给多个Thread类的构造函数创建Thread对象,然后再依次用各个对象调用start方法,启动多线程。多线程提高了应用程序的运行效率,但通过实现Runnable接口创建的多线程有一个弊端,就是不同线程同时访问CPU时,有可能出现同时卡壳的情况,导致后面可能出现操作数异常,java提供了一种synchronized锁机制代码块,类似火车卫生间,如果有一个线程正在执行程序,其他线程将无法访问CPU来对共同的操作数据做处理,直到上一个现象操作结束! 

  2015年8月23日。今天具体学习了java多线程中的同步代码块和同步函数的区别,死锁,同步在单例设计模型中的使用,以及多线程的相互通信。
同步代码块和同步函数的区别,主要表现为1、synchronized关键字的位置不同,代码块在函数内,同步函数在函数上;2、锁对象不同,同步代码块可以是任意对象,同步函数是调用该方法的对象引用,即this,如果是静态同步函数,则为该类的.class字解码对象,随着类的加载即存在。
死锁,就是两个以上需要被多线程执行的代码块,分别嵌套了两个以上相同的锁,当一线程进入锁A时,需要获取锁B才能执行代码,而此时二线程获取了锁B,需要获取锁A才能继续执行,此时就出现了,由于两个线程都不能执行完当前代码,就不能跳出自己占有的锁,而让对方获取,即为锁死,程序员编写程序要避免锁死情况出现。
同步在单例设计中的应用,体现在,懒汉式模型,导致对象的延迟加载,如果多个线程同时访问单例模式的getInstance方法,如果前一个线程访问判定对象为空之后,暂时失去执行权,后一个线程进来后就可以再new一个对象,此时前一对象获取执行权也可以再new一个对象,就导致了多个对象的出现,即不符合单例模式,又因为多对象对应了同一对象名,会导致程序报错,解决的最优办法就是加入双重判断及同步锁,先判断空,然后锁,再判断空,然后再创建对象!
多线程的相互通信讲的是,当多个线程对同一数据做不同操作时,由于不同的操作执行不同的代码块,就好比煤厂有车拉进来还有车拉走。根据真实情况,可能导致操作数据异常,此时要对两个线程加同一个同步锁来控制,保证输入和输出的数据相符!总结:真TM抽象[流汗][流汗][流汗] 

0 0
原创粉丝点击