java初级第19天总结笔记

一、处理流--序列化流(输出流)-
     作用:把程序的(基本类型+引用类型)数据      写到      数据源(字节数据-可以长久存储)
    
     反序列化流(输入流)
    
     处理流--打印流(输出流)
     作用:把程序的(基本类型+引用类型)数据      写到      数据源(字符串数据-可以给用户显示使用)
    
    两个打印流
     PrintStream
     PrintWriter
    
     对比
     1)超类型不同
         PrintStream-》继承outputStream--》传输最小数据单元是字节
      PrintWriter-》继承Writer--》传输最小数据单元是字符
     2)自动刷新机制不一样
    
 二、线程
 
      java中开启线程两种方式java中开启线程两种方式
      1)定义新的类实现Runnable接口
      2)定义新的类继承Thread类
    
      实现Runnable(任务)接口-开启线程步骤
      1)新定义任务类实现Runnable接口
      重写run方法->任务方法
      2)创建新定义任务类对象
      3)创建线程对象-绑定任务对象
      4)开启线程-执行任务
      
      java的线程
      1)main线程    任务--》把main执行完成
      2)thread线程     任务--》把run执行完成
      
      线程的死亡
      1)执行完任务代码(main方法或run方法)
      2)遇到了异常抛给jvm
      
      线程相关的状态
        
         1. 新建(new):
    新创建了一个线程对象。
         2. 可运行(runnable):
    线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。
         3. 运行(running):
    可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。
         4. 阻塞(block):
    阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。
    阻塞的情况分三种:  
    (一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
    (二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
    (三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
         5. 死亡(dead):
    线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。
     
         
         线程的优先级:线程执行代码的[概率],优先级越高,执行代码的机会越高。
         线程默认优先级--》5
        线程设置优先级 setPriority(int newPriority)
        
        优先级10个级别1-10整数(10最大,1最小)
        
        常量优先级数字
        public static final int MAX_PRIORITY 10
         public static final int MIN_PRIORITY 1
         public static final int NORM_PRIORITY 5
        
        
          线程的分类
          1)普通(用户)线程(银行的业务员):执行业务逻辑的线程
          -如果进程中有多个普通线程,必须每个普通线程执行完成,进程才会结束。
          2)守护(后台)线程(银行的清洁工):执行业务逻辑支持的线程(gc线程)-
          -如果进程中有多个普通线程和守护线程,如果所有的普通线程都执行完成
          -那么正在执行守护线程也会随之停止。
          
          设置对应的线程
          1)main线程-》普通线程
          2)gc线程-》守护线程
          3)新创建的thread线程--》默认是-》普通线程
          setDaemon(true)-》守护线程
          
三、synchronized三种使用
       
       synchronized成员方法(重点):锁对象--》调用了当前成员方法的对象(this)
           语法:public synchronized 返回值类型  方法名(...)...;
       
       synchronized块(了解):锁对象--》锁住传入的指定对象
           语法:synchronized(被锁的对象){
    
           }
       
       synchronized静态方法(了解)
        
          对象锁:执行同步代码的时候需要把对象锁住。
       每个对象都有一个对象锁,线程在执行对象synchronized修饰的代码时,会先【自动获取对象锁】,会把该对象的synchronized修饰的所有代码锁住,
    执行完成synchronized代码后,会【自动释放对象锁】,其他线程才可以获取对象锁,获取之后【自动获取对象锁】锁住synchronized代码然后执行。

       synchronized 关键字:会【自动获取锁和释放锁】,也可以手动获取和释放!java.util.concurrent.locks包提供了丰富的支持。

你可能感兴趣的:(javase基础)